我對某些JNI代碼有問題。 我得到在從OS X 10.4.11(PPC)機打印到控制檯下面的錯誤(正常工作在OS X 10.5以上的較新版本)Mac OS X 10.4.11上的JNI錯誤... dyld:找不到符號:_objc_setProperty
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「東西」。另一個在10.4.11上工作的jnilib僅使用1 .m文件,並沒有使用目標c屬性(它使用NSMutableArray,NSDictionary,CFPreferences等)。在10.4.11上不起作用的那個更復雜一些,就是使用了我寫的一些客觀的c類和合適的東西。
也許我沒有正確編譯我的代碼或者屬性不被支持?
我有一個編譯jnilib的shell腳本。就我所能說的而言,它幾乎與我們所做的一樣。我有另一個部分在腳本中編譯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}
我很感激你的答案和想法如何調試這一個。 謝謝!
但我仍然必須轉換爲不使用目標c屬性嗎?那麼,它只是使用Objective C 1.0的功能來支持前期的豹子,就像馬克所說的那樣?另外,你是否在談論使用XCode中的JNI模板?我嘗試使用JNI模板,但是我發現它有點麻煩,因爲我並不真正需要/想要使用javah,我無法弄清楚如何自定義項目/設置。我在開源項目中找到了一些Mac JNI的例子,我看到的例子使用make或shell腳本,這就是我最終做的。我仍然在XCode中編寫代碼。 – Cal 2009-10-03 17:32:05
「但我仍然必須轉換爲不使用客觀的c屬性嗎?那麼,它只是使用Objective C 1.0的特徵來支持前期豹的支持,就像馬克所說的那樣?「對;你不能在Tiger上使用Objective-C 2.0中的任何東西。 – 2009-10-03 20:33:07
「我仍然在XCode中編寫代碼」。僅將Xcode用作文本編輯器並不能爲您構建系統帶來便利。 – 2009-10-03 20:34:40