2011-11-27 85 views
7

我试图在Mac OS X Lion上编译来自Erlang的NIF测试(http://www.erlang.org/doc/man/erl_nif.html)。我无法得到它编译。我是否缺少编译器标志?这是我得到的错误:Erlang NIF测试-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架构无论是。

谢谢!

回答

11

64位二郎尝试使用这些标志,下面的工作对我来说:

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

它是动态查找!谢谢:) – batman

+0

非常感谢您的回答:) – ttvd

2

看起来你的问题不是架构,而是未定义的符号_enif_make_string,这意味着你必须链接到你的enif库,不管它是什么,使用-l选项。另外,自从我为OS X构建共享库已经很长时间了,但我认为使用的正确标志是-dynamiclib而不是-shared,并且在-I之后不需要有空格。

+0

如果我有'#include'指令和-I标志,不应该足以引用包含文件吗?检查链接。谢谢! – batman

+1

@TravisPowell:不,'#include'仅用于编译而不用于链接。你的错误在链接中,请参阅'ld:sym ...'。这是链接器错误。 –

1

编译时,你的NIF,而不是-shared

-bundle -flat_namespace -undefined suppress