![](/img/trans.png)
[英]How can I compile and execute Java from command line adding external Jar and using file's full path?
[英]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.