使用OpenCV的IntelliJ可执行Jar文件

时间:2015-05-25 23:50:05

标签: java opencv intellij-idea jar

我正在尝试使用IntelliJ导出使用外部库的java项目,在本例中为OpenCV。最初,我不断收到“不满意的链接错误”,即使外部库已经设置为依赖项。我在网上搜索,看到我必须在这里设置VM:

enter image description here

所以我将库路径设置为我的计算机中openCV的位置。在我这样做之后,程序运行并正确编译。

我现在的任务是将项目导出到一个可运行的jar文件中,而目标计算机不需要安装openCV。我听从this post的建议。这就是我的设置神器的样子:

enter image description here

因此,在导出后,尝试双击它,它什么都不做。然后我用“java -jar .jar”运行它,这导致了旧的“不满意的链接错误”问题:

enter image description here

我非常了解问题所在,但我不知道如何修复它...如何在可执行文件中设置VM选项以指向提取的jar文件?

1 个答案:

答案 0 :(得分:1)

我相信您还应该包含来自OpenCV的本地库文件,这些文件位于build / lib

在Mac上的例子是libopencv_java310.dynlib

Screenshot of artifact description

在我的屏幕截图中,您可以看到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