У меня проблема с некоторым кодом JNI.
Я получаю следующую ошибку, напечатанную в консоли с компьютера с OS X 10.4.11 (PPC) (она отлично работает на более новых версиях OS X 10.5 +)
dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty
Referenced from: /Path/to/my/lib/libMylib32.jnilib
Expected in: /usr/lib/libobjc.A.dylib
dyld: Symbol not found: _objc_setProperty
Referenced from: /Path/to/my/lib/libMylib32.jnilib
Expected in: /usr/lib/libobjc.A.dylib
У меня есть другой jnilib, который отлично работает, и он работает до этого в программе. Кажется, ошибка говорит о том, что мне не хватает какой-то основной цели c "мелочи". Другой jnilib, который работает с 10.4.11, использует только 1 .m файл и не использует объективные свойства c (он использует NSMutableArray, NSDictionary, CFPreferences и так далее). Тот, который не работает в 10.4.11, является более сложным, использует некоторые объективные классы c с написанными мной свойствами.
Может быть, я неправильно компилирую свой код или свойства не поддерживаются?
У меня есть скрипт оболочки, который компилирует jnilib. Это практически то же самое, что работает, насколько я могу судить. У меня есть другой раздел для компиляции 64-битного jnilib выше этого в скрипте, но 32-битный используется для 10.4.11.
COCOA_HEADERS=/System/Library/Frameworks/Cocoa.framework/Headers
BITS=32
JAVA_HEADERS=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Headers
MAC_SDK=/Developer/SDKs/MacOSX10.4u.sdk
CFLAGS="-fPIC -arch i386 -arch ppc"
LIB_NAME=${LIB_PREFIX}${BITS}.jnilib
MAC_LIB_OUTPUT=/path/to/my/output/folder/${LIB_NAME}
DYLIB_ARCH="-arch i386 -arch ppc"
rm *.o
#Compile for 1.5 32bit Java
gcc -v -std=gnu99 -c ${CFLAGS} -isysroot ${MAC_SDK} -I${JAVA_HEADERS} -I${COCOA_HEADERS} ${SOURCE_FILES}
# Make the library file from the object files (*.o)
gcc -v -dynamiclib -o ${MAC_LIB_OUTPUT} *.o -framework JavaVM -framework Cocoa ${DYLIB_ARCH}
Я ценю ваши ответы и идеи о том, как отладить этот.
Спасибо!