我正在尝试使用IntelliJ导出使用外部库的java项目,在本例中为OpenCV。最初,我不断收到“不满意的链接错误”,即使外部库已经设置为依赖项。我在网上搜索,看到我必须在这里设置VM:
所以我将库路径设置为我的计算机中openCV的位置。在我这样做之后,程序运行并正确编译。
我现在的任务是将项目导出到一个可运行的jar文件中,而目标计算机不需要安装openCV。我听从this post的建议。这就是我的设置神器的样子:
因此,在导出后,尝试双击它,它什么都不做。然后我用“java -jar .jar”运行它,这导致了旧的“不满意的链接错误”问题:
我非常了解问题所在,但我不知道如何修复它...如何在可执行文件中设置VM选项以指向提取的jar文件?
答案 0 :(得分:1)
我相信您还应该包含来自OpenCV的本地库文件,这些文件位于build / lib
中在Mac上的例子是libopencv_java310.dynlib
在我的屏幕截图中,您可以看到OpenCV java库(.jar),以及我的模块的编译输出,此外我还包括两个版本的共享库(适用于Mac的.dynlib和适用于Linux的.so)
如果你在Windows上,那么我猜你的OpenCV构建/安装会给你一个你应该也包含的.dll。
如果您希望在运行/开发时从文件系统中找到共享库文件,但希望对其进行清晰分发,并在其他人运行它时在JAR文件中找到它,那么您可能希望用这样的代码加载它,而不是处理两种情况:
import cz.adamh.utils.NativeUtils;
class SimpleSample {
static {
try {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
} catch (UnsatisfiedLinkError e) {
try {
NativeUtils.loadLibraryFromJar("/" + System.mapLibraryName(Core.NATIVE_LIBRARY_NAME));
} catch (IOException e1) {
throw new RuntimeException(e1);
}
}
}
你可以在他的GitHub上找到cz.adamh.utils.NativeUtils的实用程序类https://github.com/adamheinrich/native-utils/blob/master/src/main/java/cz/adamh/utils/NativeUtils.java
JAR中文件的路径必须以" /"开头。在我的示例中,我在JAR的根目录中有我的本机库,所以" /"是预先的。如果您将原生扩展名放在JAR的子文件夹中,请在上面的代码中指定它的路径。
然后在不同的平台上,我相信JVM会找到"对"尝试在运行时加载它时使用的共享本机库。
我使用SimpleSample(在samples / java / ant中)完成了这项工作。
然后我使用IntelliJ菜单生成JAR" Build>建造文物"。
然后我可以使用:
运行它java -jar ../的OpenCV-java的样品输入/输出/伪影/ SimpleSample_jar / SimpleSample.jar