繁体   English   中英

如何从命令行(Unix)将外部库(OpenCV .jar文件)添加到Java构建路径

[英]How to add an external library (OpenCV .jar file) to the Java build path from the command line (Unix)

我试图从终端将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()而在其他导入库的情况下则没有必要,那么将不胜感激。

问题是命令行不知道本地库在磁盘上的位置(即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上用分号(;)分隔。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM