Erlang运行时错误的体系结构?
我在OSX 10.6 Snow Leopard上玩http://www.erlang.org/doc/tutorial/nif.html。我在运行该示例时遇到了一些麻烦。Erlang运行时错误的体系结构?
我编译使用:
gcc -o complex_nif.so -fpic -I/usr/local/lib/erlang/usr/include -flat_namespace -undefined suppress complex.c complex_nif.c
和使用Erlang的运行:
Erlang R15B01 (erts-5.9.1) [source] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
1> c(complex).
{error,on_load_failure}
=ERROR REPORT==== 4-Apr-2013::15:24:51 ===
Error in process <0.37.0> with exit value: {{badmatch,{error,{load_failed,"Failed to load NIF library: 'dlopen(./complex_nif.so, 2): no suitable image found. Did find:\n ./complex_nif.so: mach-o, but wrong architecture'"}}},[{complex,init,0,[{file,"...
=ERROR REPORT==== 4-Apr-2013::15:24:51 ===
The on_load function for module complex returned {{badmatch,
{error,
{load_failed,
"Failed to load NIF library: 'dlopen(./complex_nif.so, 2): no suitable image found. Did find:\n\t./complex_nif.so: mach-o, but wrong architecture'"}}},
[{complex,init,0,
[{file,...},{...}]},
{code_server,
'-handle_on_load/4-fun-0-',
1,
[{...}|...]}]}
我看到,我找到.so文件。但是erlang并不喜欢它所编译的架构,erlang更喜欢哪种架构?
验证您的Erlang运行系统使用的体系结构。例如: -
$ which erlc
/usr/local/bin/erlc
$ file /usr/local/bin/erlc
/usr/local/bin/erlc: Mach-O 64-bit executable x86_64
确保您的库上面的体系结构相匹配:
$ file complex_nif.so
complex_nif.so: Mach-O 64-bit executable x86_64
如果它们不匹配,编译库与-arch i386
(或-arch x86_64
)标志。
The do match .. sorta'complex.so:Mach-O动态链接共享库i386'和'/ usr/local/bin/erlc:Mach-O可执行文件i386' – 2013-04-05 01:31:46
我让它们完全匹配 - 仍然是相同的错误.. – 2013-04-05 01:33:58
你能显示编译命令的全部序列,相对错误和'file'命令的输出吗? – 2013-04-05 14:54:36
32位VS 64位? – 2013-04-04 22:48:07
@RobertoAloi,我已经尝试了-m32和-m64,他们没有任何区别。 – 2013-04-04 22:49:00