我正在使用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中打印出它的内容。
网上还有很多其他类似的问题,但我无法找到任何图书馆路径正确且问题仍然存在的地方。请协助 - 我想不出会出现什么问题?如果需要更多信息,请与我们联系。
答案 0 :(得分:1)
好吧,当系统由于其路径而无法加载您的lib时会发生此异常。
可能的例外情况:
SecurityException - 如果存在安全管理器及其checkLink 方法不允许加载指定的动态库
UnsatisfiedLinkError - 如果库不存在
NullPointerException - 如果libname为null
所以,似乎你需要传递方法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");
不要忘记更改扩展名和双栏“\\”