【问题标题】:How to add an external library (OpenCV .jar file) to the Java build path from the command line (Unix)如何从命令行 (Unix) 将外部库(OpenCV .jar 文件)添加到 Java 构建路径
【发布时间】:2015-04-27 23:06:54
【问题描述】:

我正在尝试从终端将 OpenCV 库添加到我的 Java 程序的构建路径中,以便我可以使用 shell 脚本在一堆图像文件上按顺序运行程序。我的项目的 .class 文件位于 Documents/Programming/Ko/bin 中,OpenCV 库的 .jar 文件位于 Documents/Programming/opencv-2.4.10/build /bin。正如这里的许多不同问题所建议的那样,我已经尝试过(在 Ko/bin 目录中):

java -cp "/Users/jordan/Documents/Programming/opencv-2.4.10/build/bin/*:." Ko <image_name>

这会产生以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java2410 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at Ko.main(Ko.java:37)  

所以程序在第 37 行遇到了问题。这一行是:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  

我在 Eclipse 中加载 OpenCV 库时遇到问题后添加了这一行,这是根据此处另一个问题的建议,尽管我不确定它的作用或为什么它是必要的。当我尝试注释掉这一行时,我得到了一个类似的错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_0(Ljava/lang/String;I)J
    at org.opencv.highgui.Highgui.imread_0(Native Method)
    at org.opencv.highgui.Highgui.imread(Highgui.java:309)
    at Ko.main(Ko.java:39)  

这次是在第 39 行,从逻辑上讲,这是我第一次调用 OpenCV 库中的方法。

据我所知,我编写java -cp ... 命令的方式与我在此处阅读的问题中对其他人有用的方式相同。如果有人能告诉我哪里出了问题,并能解释为什么在这种特殊情况下调用 System.loadLibrary() 是必要的,而在其他导入库的情况下则不需要,将不胜感激。

【问题讨论】:

    标签: java unix opencv terminal classpath


    【解决方案1】:

    问题在于命令行不知道本地库在磁盘上的位置(即 opencv2.so 文件)。在命令中添加一个额外的标志并指定本机库的路径后,程序正确执行:

    java -D'java.library.path=<path to native libraries>' -cp '<path to Ko.class>:<path to opencv-2.4.x jar file>' Ko <path to input image file>
    

    第一个标志 (-D) 将 java.library.path 变量设置为特定于该应用程序的本机库,以便 JRE 知道 jar 文件链接到的位置。 第二个标志 (-cp) 设置类路径(JRE 在哪些目录中查找要运行的文件)。这些目录在 OSX/Linux/Unix 上用冒号 (:) 分隔,在 Windows 上用分号 (;) 分隔。

    希望这对将来遇到此问题的任何人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-14
      • 2014-01-20
      • 1970-01-01
      • 2013-04-06
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多