Erlang NIF 测试——OS X Lion
Posted
技术标签:
【中文标题】Erlang NIF 测试——OS X Lion【英文标题】:Erlang NIF Test -- OS X Lion 【发布时间】:2012-01-07 11:17:14 【问题描述】:我正在尝试在 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 架构。
谢谢!
【问题讨论】:
【参考方案1】:您的问题似乎不是架构而是未定义的符号_enif_make_string
,这意味着您必须使用-l
选项与您的enif
库链接,无论它是什么。另外,我已经很长时间没有为 OS X 构建共享库了,但我认为正确的标志是 -dynamiclib
而不是 -shared
,而且你不必在 -I
之后有空格.
【讨论】:
如果我有#include
指令和 -I 标志,那还不足以引用包含文件吗?查看链接。谢谢!
@TravisPowell:不,#include
仅用于编译,但不适用于链接。您的错误在于链接,请参阅ld: sym...
。这是链接器错误。【参考方案2】:
在编译你的 nif 时尝试使用这些标志而不是 -shared
-bundle -flat_namespace -undefined suppress
【讨论】:
【参考方案3】:对于 64 位 Erlang,以下适用于我:
gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so \
-I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include
【讨论】:
动态查找!谢谢:) 非常感谢您的回答:)以上是关于Erlang NIF 测试——OS X Lion的主要内容,如果未能解决你的问题,请参考以下文章