Java Eclipse导出的Runnable Jar找不到外部库

Java Eclipse导出的Runnable Jar找不到外部库,java,eclipse,jar,executable-jar,Java,Eclipse,Jar,Executable Jar,我有一个带有两个外部库的Java项目。在Eclipse中一切都运行良好,作为可运行JAR导出时没有错误。然而,当我使用java-jar myapplication.jar通过命令行运行我的项目时,它抛出了臭名昭著的java.lang.unsatifiedlinkerror:no in java.library.path 我尝试过使用所有三种导出选项(提取、打包、复制),但都没有成功 (使用eclipse)为了让System.loadLibrary()工作,库(在Windows上是DLL)必须位于

我有一个带有两个外部库的Java项目。在Eclipse中一切都运行良好,作为可运行JAR导出时没有错误。然而,当我使用
java-jar myapplication.jar通过命令行运行我的项目时,
它抛出了臭名昭著的
java.lang.unsatifiedlinkerror:no in java.library.path

我尝试过使用所有三种导出选项(提取、打包、复制),但都没有成功


(使用eclipse)

为了让System.loadLibrary()工作,库(在Windows上是DLL)必须位于路径上的某个目录中,或者位于java.library.PATH系统属性中列出的路径中(这样您就可以像java一样启动java-Djava.library.PATH=/PATH/to/dir)

此外,对于loadLibrary(),您可以指定库的基本名称,但末尾不带.dll。因此,对于/path/to/something.dll,您只需使用System.loadLibrary(“something”)

您还需要查看得到的确切的未满意链接错误。如果它说:

线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有foo 然后在您的路径或java.library.PATH中找不到foo库(foo.dll)。如果它说:

线程“main”java.lang.UnsatisfiedLinkError中出现异常:com.example.program.ClassName.foo()V 然后,库本身就出了问题,因为Java无法将应用程序中的本机Java函数映射到其实际的本机对应函数

首先,我会在System.loadLibrary()调用中做一些日志记录,看看它是否正确执行。如果它抛出异常或不在实际执行的代码路径中,那么您将始终得到上面解释的后一种类型的UnsatifiedLinkError


作为旁注,大多数人使用本机方法将loadLibrary()调用放入类中的静态初始值设定项块中,以确保它始终只执行一次:

ah yes。我忘了提。我使用的库是OpenCV+ntcore。
ntcore.dylib
opencv\u java320.dylib
都位于生成的jar中。但由于某些原因,jar似乎找不到我的OpenCV库。我也有类似的问题,OpenCV也是如此。当我创建从Eclipse导出的JAR文件时,我不能在我的环境之外运行JAR。我想创建一个JAR,这样我就可以将它分发给任何人,包括没有安装OpenCV的人。那么,如何创建一个包含所有依赖项的JAR呢?