Erlang NIF Test - OS X Lion

Я пытаюсь скомпилировать тест NIF из Erlang ( http://www.erlang.org/doc/man/erl_nif.html) на Mac OS X Lion. Я не могу заставить его скомпилировать. Я пропускаю флаг компилятора? Вот ошибка, которую я получаю:

Computer:~ me $ gcc -fPIC -shared -o niftest.so niftest.c -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include/
Undefined symbols for architecture x86_64:
  "_enif_make_string", referenced from:
      _hello in ccXfh0oG.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Я также попробовал это с -m32 но там написано, что архитектуры i386 тоже нет.

Спасибо!

3 ответа

Решение

Для 64-битного Erlang у меня работает следующее:

gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so \
    -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include

Похоже, ваша проблема не в архитектуре, а в неопределенном символе _enif_make_stringЭто означает, что вы должны связаться с вашим enif библиотека, что бы это ни было, используя -l вариант. Кроме того, прошло много времени с тех пор, как я создал общую библиотеку для OS X, но я думаю, что правильный флаг для использования -dynamiclib и не -sharedи вам не нужно иметь место после -I,

Попробуйте использовать эти флаги при компиляции nif вместо -shared

-bundle -flat_namespace -undefined suppress
Другие вопросы по тегам