JNI UnsatisfiedLinkError问题

时间:2014-08-26 13:27:37

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

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

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

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

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

网上还有很多其他类似的问题,但我无法找到任何图书馆路径正确且问题仍然存在的地方。请协助 - 我想不出会出现什么问题?如果需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

好吧,当系统由于其路径而无法加载您的lib时会发生此异常。

可能的例外情况:

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

  2. UnsatisfiedLinkError - 如果库不存在

  3. NullPointerException - 如果libname为null

  4. 所以,似乎你需要传递方法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");
    

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