我对Eclipse很熟悉。我写的是使用外部jar的简单测试类。它使用本机库.dll 当我从Eclipse运行时,命令运行。 这是我的堆栈跟踪:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\YAZ\bin\yaz4j.dll: The specified procedure could not be found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at org.yaz4j.Connection.<clinit>(Connection.java:56)
at ru.Test.testConnection(Test.java:20)
at ru.Test.main(Test.java:15)
但是当我像这样从控制台运行这段代码时
java -cp "bin;C:\Program Files\YAZ\java\yaz4j.jar" ru.Test
一切都很完美! 这是相同的代码。 它在控制台中如何工作而在Eclipse中不起作用?
这里我如何将这个引用的jar插件插入Eclipse中的项目:
答案 0 :(得分:0)
本机方法无法链接时收到的消息非常糟糕。我可以想到可能会给出这个信息的几个根本原因:
答案 1 :(得分:0)
所以,出乎意料的是,我在这个问题中找到了对我的情况的某种答案java.io.Console support in Eclipse IDE
虽然不是真正的解决方案,但是进一步开展工作的方式
答案 2 :(得分:0)
我一直在努力解决完全相同的问题,现在试图在我的项目中使用YAZ工具包。问题是本机库可以在各种测试计算机上正确加载,但不能在我的个人PC上加载。
简而言之:问题的原因是JVM加载了错误的 libxml2.dll 和 libxslt.dll 依赖库。< / p>
当我从IDE启动JVM时,它开始在以下位置查找本机库:
我已经通过使用Process Monitor来解决这个问题。请注意,步骤1和2可以互换。
名为 yaz4j.dll 的YAZ工具包主DLL会对工具箱中的其他dll进行二次调用: libxml2.dll 和 libxslt.dll (其中包括)。 我的JVM在(jdk_home)\ jre \ bin 目录中找到它们。它们似乎与Java捆绑在一起,它们明显不同于YAZ工具包中的那些。 这意味着在那些dll中找不到yaz4j.dll调用的过程。这样就抛出了UnsatisfiedLinkException。
我的JVM似乎总是首先搜索(jdk_home)\ jre \ bin 中的本机库,而不管环境%path%变量或-Djava.library.path开关。 替换该dir中的dll可能会破坏一些JVM本机功能,因此我不建议这样做。
因此,需要完成的最后一步是弄清楚如何使JVM加载正确的 libxml2.dll 和 libxslt.dll 库。
重新编译 yaz4.dll 以使其指向重命名 libxml2.dll , libxslt.dll 可能是一个潜在的解决方案。
答案 3 :(得分:0)
我有同样的问题,你需要JDK而不是JRE构建路径库