一点背景: 我有一个java应用程序需要与mac上的第三方硬件通信。他们给了我sdk,但它不是Java。所以我试图让jnilib充当我的java应用程序和SDK之间的桥梁。
问题: 我已经制作了一个与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 :(得分:0)
进入 JNI 代码后,java.library.path
指向的内容不再重要。
进入 JNI 代码后,您所能做的就是通过LD_LIBRARY_PATH
/ DYLD_LIBRARY_PATH
确保代码可以看到您的代码,或者您可以动态加载来自任何您喜欢的位置的库文件。
所以,对你而言,我建议你来看看:
在构建 JNI 库并使用 rpath 时,您也可以从编译标志中受益。