一點背景: 我有一個需要跟Mac上的第三方硬件的Java應用程序。他們給了我sdk,但它不在Java中。所以我正在嘗試使jnilib成爲我的Java應用程序和SDK之間的橋樑。MAC + JNI + java的
問題: 我已是會談的SDK,但一個小樣本jnilib當我嘗試在我的java程序使用它,我得到以下錯誤
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib: Library not loaded: build/Release/SMARTResponseSDK.framework/Versions/A/SMARTResponseSDK Referenced from: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib
Reason: image not found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1742)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at com.learning.lesson13.JniSmart7.<clinit>(JniSmart7.java:6)
從它看起來像錯誤我libSmartTest7.jnilib
正在尋找圖書館SMARTResponseSDK
。
我試過的東西 我知道圖書館SMARTResponseSDK
在我的Mac上。我試圖將它複製到eclipse中的工作文件夾中,但仍然出現錯誤。我曾嘗試使用-DJava.library.path
,但我仍然遇到錯誤。
對什麼是最好的可行的方法是任何想法。
在OSX庫必須要麼的java.library.path或DYLD_LIBRARY_PATH環境變量中找到。你還應該檢查你的庫,以確保它不使用相關庫的特定絕對路徑(除非它位於系統安裝位置)。 – technomage 2012-02-17 17:45:50
嗨,感謝您的評論。我很抱歉,但它看起來像是我的錯誤。有兩個「SMARTResponseSDK」庫。看起來像我在構建我的jnilib時使用了錯誤的一個。我使用了其他的「SMARTResponseSDK」,問題似乎已被清除。 – user1216750 2012-02-17 21:03:06
您可能還會考慮Rococoa,它可以避免編寫任何本機代碼並直接從Java訪問第三方庫。 – technomage 2012-02-22 19:07:34