2012-02-17 68 views
5

一點背景: 我有一個需要跟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,但我仍然遇到錯誤。

對什麼是最好的可行的方法是任何想法。

+0

在OSX庫必須要麼的java.library.path或DYLD_LIBRARY_PATH環境變量中找到。你還應該檢查你的庫,以確保它不使用相關庫的特定絕對路徑(除非它位於系統安裝位置)。 – technomage 2012-02-17 17:45:50

+0

嗨,感謝您的評論。我很抱歉,但它看起來像是我的錯誤。有兩個「SMARTResponseSDK」庫。看起來像我在構建我的jnilib時使用了錯誤的一個。我使用了其他的「SMARTResponseSDK」,問題似乎已被清除。 – user1216750 2012-02-17 21:03:06

+0

您可能還會考慮Rococoa,它可以避免編寫任何本機代碼並直接從Java訪問第三方庫。 – technomage 2012-02-22 19:07:34

回答

0

一旦你進入JNI代碼,它不再是什麼java.library.path點。

一旦你在裏面JNI代碼,所有你能做的就是確保庫是你的代碼可見通過LD_LIBRARY_PATH/DYLD_LIBRARY_PATH,也可以動態地從你喜歡的任何位置加載您的庫文件。

所以,爲了你,我建議看看這裏:

您可以從編譯標誌,同時建立你的JNI庫也受益,並使用rpath的