Erlang NIF Test - OS X Lion - PullRequest
       26

Erlang NIF Test - OS X Lion

7 голосов
/ 27 ноября 2011

Я пытаюсь скомпилировать тест 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 ]

12 голосов
/ 28 ноября 2011

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

gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so \
    -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include
2 голосов
/ 27 ноября 2011

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

1 голос
/ 28 ноября 2011

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

-bundle -flat_namespace -undefined suppress
...