【问题标题】:Load java libraries from relative path从相对路径加载 java 库
【发布时间】:2014-08-28 13:37:08
【问题描述】:

我编写了一个使用 OpenCV 库的 Java 程序。到目前为止,我使用 eclipse 执行了程序(并在 eclipse 属性中设置了 Jar 位置)。

这是一个大学期末项目。我的导师现在想在他的电脑上运行这个程序。如何生成一个可运行的 jar(使用 Ant 或使用 Java 代码),它将从特定位置(将位于可执行 Jar 目录中的目录)加载 Java OpenCV jar,这将适用于 Linux 和 Windows(我理解linux用的是jar文件,windows用的是dll文件)?

我尝试过使用:

String currentDir = System.getProperty("user.dir");
System.load(currentDir + "/path_to_jar/opencv-248.jar");

(我们忽略它只会在linux下工作的事实)但是在执行jar时,会出现以下错误:

OpenJDK 64 位服务器 VM 警告:您已加载库 /path_to_jar/opencv-248.jar,它可能禁用了堆栈保护。虚拟机现在将尝试修复堆栈防护。 强烈建议您使用“execstack -c”修复库,或使用“-z noexecstack”链接它。 线程“main”中的异常 java.lang.UnsatisfiedLinkError: /path_to_jar/opencv-248.jar: /path_to_jar/opencv-248.jar: 无效的 ELF 标头(可能原因:字节序不匹配)

任何帮助将不胜感激。

【问题讨论】:

  • linux 不加载“jars”,它加载“.so”文件。 jar 在类路径上。共享库“.so”应该在 java 命令行参数“-Djava.library.path”定义的位置可用。

标签: java


【解决方案1】:

为您的 java 可执行文件使用类路径选项。

如果您正在运行 OpenJDK,请阅读手册页 http://linux.die.net/man/1/java-java-1.6.0-openjdk

您应该能够使用以下内容: java -jar yourapp.jar -cp ./path_to_jar/

另一种选择是构建一个包含其自身依赖项的 JAR。以下是我使用搜索词“java create jar include dependencies”找到的一些示例:

Using Maven

Using Eclipse

【讨论】:

  • 两个选项都输出错误:“java.lang.UnsatisfiedLinkError: no opencv_java248 in java.library.path”。难道不让用户改变他的系统就可以完成吗?
  • 我提供的链接应该解释如何构建一个包含其依赖项的 JAR。你能用你尝试过的替代方法和产生的任何错误来更新你的原始问题吗?
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 2011-02-28
  • 2023-04-01
  • 2019-11-24
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多