【问题标题】:JNI UnsatisfiedLinkError issueJNI UnsatisfiedLinkError 问题
【发布时间】:2014-10-19 20:25:48
【问题描述】:

我正在创建一个 Java 程序,使用 JNI 通过 C 程序收集数据。我已经阅读了这个 JNI 教程 (https://thenewcircle.com/static/bookshelf/java_fundamentals_tutorial/_java_native_interface_jni.html),一切都正确编译。但是,当我尝试在 Eclipse 中运行 Java 程序时,我不断收到此错误:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:java.library.path 中没有 TurtleTrackerImpl 在 java.lang.ClassLoader.loadLibrary(未知来源) 在 java.lang.Runtime.loadLibrary0(未知来源) 在 java.lang.System.loadLibrary(未知来源) 在 main.TurtleTracker.(TurtleTracker.java:28) 在 main.Driver.main(Driver.java:54)

我在同名的 Java 类中包含使用 System.loadLibrary("TurtleTrackerImpl") 的库。

我已经打印出库路径以确保它是正确的 (C:\Users\duril_000\workspace\ArenaTracker\ArenaTracker\src),并且我已经检查了该路径中是否存在 libTurtleTrackerImpl.jnilib(它存在,我什至可以在 Eclipse 中打印出它的内容)。

网上还有很多其他类似的问题,但是我一直找不到库路径正确的地方,问题仍然存在。请帮忙——我想不出有什么问题?如果需要更多信息,请告诉我。

【问题讨论】:

    标签: java c eclipse dll java-native-interface


    【解决方案1】:

    嗯,这个异常发生在系统无法加载你的库时,因为它的路径。

    可能的例外情况:

    1. SecurityException -- 如果安全管理器存在并且它的 checkLink 方法不允许加载指定的动态库

    2. UnsatisfiedLinkError -- 如果库不存在

    3. NullPointerException -- 如果 libname 为空

    因此,您似乎需要在方法loadLibrary 中传递完整路径,这是一个示例:

     // load a library that is Windows/System32 folder
      System.out.println("Loading Library...");
      Runtime.getRuntime().loadLibrary("C:/Windows/System32/crypt32.dll");
      System.out.println("Library Loaded.");
    

    在你的情况下,尝试这样的事情:

    Runtime.getRuntime().loadLibrary("C:\\Users\\duril_000\\workspace\\ArenaTracker\\ArenaTracker\\src\\TurtleTrackerImpl.extension");
    

    不要忘记更改扩展名和双杠“\\”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多