7

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アーキテクチャもありません。

ありがとう!

4

3 に答える 3

13

64ビットのErlangの場合、次のように機能します。

gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so \
    -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include
于 2011-11-27T20:54:14.700 に答える
2

問題はアーキテクチャではなく、未定義のシンボル_enif_make_stringのようです。つまり、オプションenifを使用して、ライブラリとリンクする必要があり-lます。また、OS X用の共有ライブラリを構築してから久しぶりですが、使用するのに適切なフラグはそうでは-dynamiclibなく-shared、の後にスペースを入れる必要はないと思います-I

于 2011-11-27T19:43:24.797 に答える
1

-sharedの代わりにnifをコンパイルするときに、これらのフラグを使用してみてください

-bundle -flat_namespace -undefined suppress
于 2011-11-27T20:30:15.450 に答える