Eclipse导出的Runnable Jar无法通过java.lang.UnsatisfiedLinkError异常

时间:2018-03-12 21:14:06

标签: java eclipse

这是一个着名的问题,有很多类似的问题,但没有解决方案帮助我。所以,请不要将我的问题标记为重复。

我开发了一个使用外部dll的Java小应用程序。在eclipse中似乎一切正常,但是一旦我导出到runnable jar并使用java -jar myapplication.jar运行,它会抛出以下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Testing.dal.LoggingAccess.__LoggingAccess0(Lnet/sf/jni4net/inj/IClrProxy;Ljava/lang/String;)V
        at Testing.dal.LoggingAccess.__LoggingAccess0(Native Method)
        at Testing.dal.LoggingAccess.<init>(LoggingAccess.java:25)
        at Program.listItems(Program.java:32)
        at Program.main(Program.java:27)

我试图做其他答案中建议的几乎所有内容,但遗憾的是没有任何对我有用的东西。 我试图设置java.library.path,但我不知道我是否正确地做到了。我不是一个java开发人员,java世界对我来说是全新的。所以我可能会以错误的方式做到这一点。 如果你能给我任何关于如何解决这个问题的提示,那就太好了。

1 个答案:

答案 0 :(得分:0)

我自己能够解决这个问题。

所需的库位于正确的位置,但我必须在java项目中引用它。问题是我不想使用Path(环境变量)或将库复制到system32文件夹,如许多帖子中所建议的那样。这就是为什么我在主方法的开头添加System.Laod(new java.io.File("path to the dll").getAbsolutePath())

许多人建议提及没有.dll扩展名的库名,但对我来说它只适用于.dll。而且,我不仅要加载所需的库,还要加载我的库所依赖的所有库。例如:我的库依赖于EntityFramework.dll,所以我必须在main方法中包含这一行:

System.load(new java.io.File("path/EntityFramework.dll").getAbsolutePath());

将项目导出到可运行的jar文件并使用带有语句java -jar exported-file.jar的cmd进行测试后,我能够在控制台中正确查看输出。我刚刚发布了这个答案,以防有人遇到这样的错误并搜索解决方案。