我试图在Mac OS X Lion上从Erlang (http://www.erlang.org/doc/man/erl_nif.html)编译NIF测试。我无法让它编译。我错过了编译器标志吗?下面是我得到的错误:
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架构。
谢谢!
对于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