Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带OpenCV的IntelliJ可执行Jar文件_Java_Opencv_Intellij Idea_Jar - Fatal编程技术网

Java 带OpenCV的IntelliJ可执行Jar文件

Java 带OpenCV的IntelliJ可执行Jar文件,java,opencv,intellij-idea,jar,Java,Opencv,Intellij Idea,Jar,我试图使用IntelliJ导出一个使用外部库(在本例中为OpenCV)的java项目。起初,我一直收到一个“不满意的链接错误”,即使外部库已经设置为依赖项。我在网上搜索,发现我必须在这里设置虚拟机: 因此,我将库路径设置为我在计算机中拥有openCV的位置。在我这样做之后,程序运行并编译正确 我现在的任务是将项目导出到一个可运行的jar文件中,而目标计算机不需要安装openCV。我听从了他的建议。这就是我的安装工件的外观: 所以在我导出并尝试双击它之后,它什么也不做。然后,我使用“java-

我试图使用IntelliJ导出一个使用外部库(在本例中为OpenCV)的java项目。起初,我一直收到一个“不满意的链接错误”,即使外部库已经设置为依赖项。我在网上搜索,发现我必须在这里设置虚拟机:

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

我现在的任务是将项目导出到一个可运行的jar文件中,而目标计算机不需要安装openCV。我听从了他的建议。这就是我的安装工件的外观:

所以在我导出并尝试双击它之后,它什么也不做。然后,我使用“java-jar.jar”运行它,这导致了一个很好的“未满足的链接错误”问题:


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

我认为您还应该包括build/lib中的OpenCV本机库文件

我在Mac上的例子是libopencv_java310.dynlib

在我的屏幕截图中,您可以看到OpenCV java库(.jar),加上我模块的编译输出,再加上我已经包括了共享库的两个版本(.dynlib for Mac,和.so for Linux)

如果您使用的是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的实用程序类

JAR中文件的路径必须以“/”开头。在我的示例中,我在JAR的根目录中有我的本机库,因此“/”是预先挂起的。如果将本机扩展放在JAR的子文件夹中,那么在上面的代码中指定它的路径

然后在不同的平台上,我相信当您尝试在运行时加载它时,JVM会找到“正确”的共享本机库来使用

我已经用SimpleSample(在samples/java/ant中)完成了这项工作

然后我使用IntelliJ菜单“Build>Build Artifacts”生成JAR

然后,我可以使用以下命令运行它:

java-jar ../opencv java sample/out/artifacts/SimpleSample\u jar/SimpleSample.jar


我认为如果不在目标机器上安装opencv,就不可能使用.dylib()