簡體   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