【发布时间】:2012-03-09 02:28:57
【问题描述】:
一点背景: 我有一个需要与 mac 上的第三方硬件通信的 java 应用程序。他们给了我 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,但我仍然得到错误。
关于最佳方法的任何想法。
【问题讨论】:
-
在 OSX 上,该库必须在 java.library.path 或 DYLD_LIBRARY_PATH 环境变量中找到。您还应该检查您的库以确保它没有使用依赖库的特定绝对路径(除非它位于系统安装位置)。
-
您好,感谢您的评论。我很抱歉,但看起来这是我的错误。有两个“SMARTResponseSDK”库。看起来我在构建 jnilib 时使用了错误的。我使用了另一个“SMARTResponseSDK”,问题似乎已经解决了。
-
您也可以考虑使用 Rococoa,它可以让您避免编写任何本机代码并直接从 Java 访问第 3 方库。
-
你如何构建 jnilib ?
-
嗨,qrtt1,我现在不记得了,但我使用 xcode(apple ide) 并创建了一个 dylib,然后将 *.dylib 重命名为 *.jnilib。 :-)
标签: java macos sdk java-native-interface