更新:もう少し読んだ後、この問題は完全に一般的であることがわかりました。同じプロセスでアーキテクチャを混在させることはできないため、64ビットJavaはdlopen()
FMODのような32ビットライブラリにはできません。FMODライブラリへの独自のCインターフェイスを作成していることを念頭に置いて、これに対する可能な回避策はありますか?
Java Native Accessは64ビットマシン上の64ビットライブラリのみを好むため、MaxOSXで64ビットdylibを作成する必要があります。問題は、私のCソースコードに動的にFMODが含まれていることです。これは、Macでは32ビットのdylibのみを提供します。-m32オプションなしでコンパイルしようとすると(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ビットライブラリを動的に含むソースコードから64ビットdylibを取得することは可能ではないでしょうか?!