2011-11-27 123 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