2013-04-04 5 views
1

OSX 10.6 Snow Leopard에서 http://www.erlang.org/doc/tutorial/nif.html으로 놀고 있습니다. 예제를 실행하는 데 문제가 있습니다.에얼랑 런타임에 잘못된 아키텍처가 있습니까?

내가 사용하여 컴파일 :

gcc -o complex_nif.so -fpic -I/usr/local/lib/erlang/usr/include -flat_namespace -undefined suppress complex.c complex_nif.c 

및 사용 얼랑에서 실행 : 나는 내가하는 .so 파일을 찾는거야 볼

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, 
                [{...}|...]}]} 

합니다. 하지만 erlang은 컴파일 된 아키텍쳐를 좋아하지 않는다. 어떤 아키텍쳐가 선호하는 아키텍처인가?

+0

32 비트 VS 64 비트? –

+0

@ RobertoAloi, 나는 -m32와 -m64를 모두 시도했지만 아무런 차이점이 없습니다. –

답변

3

Erlang Run Time System에서 사용하는 아키텍처를 확인하십시오. 예컨대 :

$ 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) 플래그를 사용하여 라이브러리를 컴파일합니다.

+0

마카 - O는 동적으로 링크 된 공유 라이브러리 i386과/usr/local/bin/erlc : Mach-O 실행 파일 i386' –

+0

완전히 일치하게 만들었지 만 여전히 같은 오류 .. –

+1

컴파일 명령의 전체 순서, 상대 오류 및'file' 명령의 출력을 표시 할 수 있습니까? –

관련 문제