【问题标题】:Mac + jni + javaMac + jni + java
【发布时间】: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


【解决方案1】:

一旦你进入 JNI 代码,java.library.path 指向什么就不再重要了。

一旦您进入 JNI 代码,您所能做的就是确保您的代码可以通过 LD_LIBRARY_PATH/DYLD_LIBRARY_PATH 看到库,或者您可以从任何您喜欢的位置。

所以,对于你来说,我建议在这里看看:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多