【问题标题】:Erlang NIF Test -- OS X LionErlang NIF 测试——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 架构。

谢谢!

【问题讨论】:

    标签: c gcc erlang erlang-nif


    【解决方案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
      

      【讨论】:

      • 动态查找!谢谢:)
      • 非常感谢您的回答:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2011-09-29
      • 1970-01-01
      • 2016-10-06
      • 2011-10-11
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多