Обновление: после некоторого прочтения я вижу, что эта проблема носит общий характер, вы не можете смешивать архитектуры в одном и том же процессе, поэтому 64-битная Java не может dlopen()
32-битная библиотека, как FMOD. Есть ли возможный обходной путь для этого, учитывая, что я пишу свой собственный C-интерфейс в библиотеку FMOD?
Мне нужно сделать 64-битный dylib на Max OS X , потому что Java Native Access любит только 64-битные библиотеки на 64-битных машинах. Проблема в том, что мой исходный код на C динамически включает в себя FMOD, который на Mac предоставляет только 32-битные библиотеки. Когда я пытаюсь скомпилировать без опции -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
Разве нельзя получить 64-битный dylib из моего исходного кода, который динамически включает в себя 32-битные библиотеки?!