업데이트 :이 문제는 완전히 일반적인 것이므로 동일한 프로세스에서 아키텍처를 혼합 할 수 없습니다. 64 비트 자바는 FMOD와 같은 32 비트 라이브러리 dlopen()
을 사용할 수 없습니다. FMOD 라이브러리에 내 자신의 C 인터페이스를 쓰고 있음을 염두에 두면서 가능한 해결책이 있습니까?Mac OS X Snow Leopard에서 32 비트 라이브러리에 동적으로 링크되는 64 비트 공유 라이브러리 만들기
Java Native Access는 64 비트 시스템에서만 64 비트 라이브러리 만 좋아하기 때문에 Max OS X에서 64 비트 dylib를 만들어야합니다. 문제는 내 C 소스 코드가 Mac에서 32 비트 dylib 만 제공하는 FMOD를 동적으로 포함한다는 것입니다. 나는 -m32 옵션없이 컴파일 할 때 (이후 출력해야 64 비트 dylib) 나는 다음과 같은 오류 얻을 : 내 소스 코드에서 64 비트 dylib를 얻을 수
gcc -dynamiclib -std=c99 -pedantic -Wall -O3 -fPIC -pthread -o ../bin/libpenntotalrecall_fmod.dylib ../../src/libpenntotalrecall_fmod.c -lfmodex -L../../lib/osx/
ld: warning: in /usr/lib/libfmodex.dylib, missing required architecture x86_64 in file
Undefined symbols:
"_FMOD_System_CreateSound", referenced from:
_startPlayback in ccJnlwrd.o
"_FMOD_Channel_GetPosition", referenced from:
_streamPosition in ccJnlwrd.o
"_FMOD_System_Create", referenced from:
_startPlayback in ccJnlwrd.o
"_FMOD_System_PlaySound", referenced from:
_startPlayback in ccJnlwrd.o
"_FMOD_Sound_Release", referenced from:
_stopPlayback in ccJnlwrd.o
"_FMOD_Channel_IsPlaying", referenced from:
_playbackInProgress in ccJnlwrd.o
"_FMOD_System_Update", referenced from:
_streamPosition in ccJnlwrd.o
_startPlayback in ccJnlwrd.o
"_FMOD_Channel_SetPaused", referenced from:
_startPlayback in ccJnlwrd.o
"_FMOD_System_Release", referenced from:
_stopPlayback in ccJnlwrd.o
"_FMOD_System_Init", referenced from:
_startPlayback in ccJnlwrd.o
"_FMOD_Channel_SetVolume", referenced from:
_startPlayback in ccJnlwrd.o
"_FMOD_System_Close", referenced from:
_stopPlayback in ccJnlwrd.o
"_FMOD_Channel_SetCallback", referenced from:
_startPlayback in ccJnlwrd.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [all] Error 1
그것이 불가능할을 동적으로 32 비트 라이브러리를 포함합니까?!