Mac + jni + java

时间:2012-02-17 17:06:02

标签: java macos sdk java-native-interface

一点背景: 我有一个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但我仍然遇到错误。

关于最佳方法的任何想法。

1 个答案:

答案 0 :(得分:0)

进入 JNI 代码后,java.library.path指向的内容不再重要。

进入 JNI 代码后,您所能做的就是通过LD_LIBRARY_PATH / DYLD_LIBRARY_PATH确保代码可以看到您的代码,或者您可以动态加载来自任何您喜欢的位置的库文件。

所以,对你而言,我建议你来看看:

在构建 JNI 库并使用 rpath 时,您也可以从编译标志中受益。