2012-10-11 72 views
10

我使用的是Windows 7和獲取嘗試運行使用了OpenCV庫的Java項目時,此異常:opencv的Java異常

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at org.opencv.highgui.Highgui.<clinit>(Highgui.java:416) 
at teste.main(teste.java:21) 

我做了什麼錯?缺少一些進口嗎?

我想在Eclipse(不是Android)中使用openCV創建一個簡單的Java項目。從OpenCV的-2.4.2.exe文件

  • 所以我萃取javacv到C:\
  • 然後執行 「的cmake -G 」MinGW的生成文件「 -DBUILD_opencv_java = ON C:\ OpenCV的」 命令和之後,「mingw32-make」。一切都 建立一個沒有經過我添加的OpenCV的dll對我的環境變量
+0

你可以添加一些代碼,將opencv庫集成到java中嗎?看起來類加載器找不到庫。 – Fildor

+0

在運行配置中,我添加了'-Djava.library.path = C:\ opencvFinal'參數。另外在Java Build Path中,我添加了外部類文件夾,它是'C:\ opencvFinal \ bin',其中保存了所有opencv dll。而當我調用'System.loadLibrary(「opencv_java」);'它給了我例外。 – andriy

+1

等一下,你有沒有dll,只有?你需要的是一個包裝這些DLL的jar。或者你需要使用[jni](http://en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_works)自己包裝它們。 – Fildor

回答

3

我找到解決錯誤或警告

  • 。實際的dll位於openCV\opencv\build\java\x64\文件夾。在我的情況下,它的名字是opencv_java247.dll,所以我已經改變了Java代碼行

    System.loadLibrary("opencv_java244") 
    

    System.loadLibrary("opencv_java247") 
    

    我還設置機庫的位置E:/Sagar_tools/tools/openCV/opencv/build/java/x64(完整路徑的dll)在構建路徑中。

  • 6

    引發此異常是因爲系統試圖找到OpenCV需要用於此特定平臺的本機庫,但未找到它們。

    Exception in thread "main" 
    java.lang.UnsatisfiedLinkError: no opencv_java in java. 
    

    爲了解決這個錯誤

    1. 如果您正在使用OpenCV的版本<的OpenCV 2.4.6然後通過@ user3033420給出的答案是解決方案。
    2. 如果您使用的版本> = 2.4.6 OpenCV的,則罐子在名爲NATIVE_LIBRARY_NAME你給在FaceDetector類loadLibrary()功能,包括在OpenCV中的功能核心類常數變量你的項目,你可能已經有了這樣的:

      System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
      

    使用命名常量以上,沒有必要記住的斯特朗dll文件名。

    從項目的喜好添加opencv 2.4.9.jar到構建路徑爲:

    Window -> Preferences -> Java Build Path –> Add Library -> User Libraries -> 
    User Library -> & click New 
    

    你會看到一個對話框,如下圖所示。 將Opencv-2.4.9添加爲庫名 &單擊確定。

    Create New User Library

    然後Add External Jar &找到您的OpenCV罐子&單擊確定。然後展開的OpenCV-2.4.9.jar &點擊本地庫位置(無),如下所示:

    Add Native Library Location of OpenCV

    必要步驟:輸入由使用含有天然庫中的文件夾的位置「如下圖所示的OpenCV-2.4.9" &然後單擊OK:

    Native Library Folder Configuration

    所以,現在的罐子現在擁有的所有本機庫它需要做這項工作。重建java程序,一切都應該按照設計進行編譯和運行。

    +0

    我試着做同樣的事情,但我仍然得到這個錯誤。還有其他解決方法嗎? – Manpreet

    +0

    @Manpreet哪個版本的OpenCV使用?你有沒有爲'x86'&'x64'平臺嘗試過這個程序?到目前爲止你做了什麼? – OO7

    +0

    我正在使用OpenCV 2.4.9。我在x86上。我在PATH變量中添加了dll的路徑,我在項目中的OpenCV 2.4.9 .jar文件的Native庫選項下添加了它的路徑。我正在使用System.loadLibrary(「openCV_java249」)在代碼中加載庫。 – Manpreet

    4

    如果您收到此錯誤:

    Exception in thread "main" 
    java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path 
    

    這可能意味着你是從臀部,節目由布朗運動射擊,試圖讓OpenCV的工作。就像試圖通過瘋狂地按下所有按鈕來了解飛機在飛行中的工作情況。你會有一段糟糕的時光。

    什麼錯誤意味着:

    Eclipse是告訴你,jar文件無法找到它需要做的工作庫。所以很自然,只有讓它們可用,它纔會起作用。您必須在您的特定平臺上找到「如何從源代碼構建openCV」的教程:(Windows,Mac,Linux等)(32位,64位等)。

    基本上,您掩蓋了「本機庫位置」設置,或沒有正確設置它們,所以jar無法找到其編寫的支持庫,編號爲C

    如何解決這個問題,千點足看法:

    1. 下載OpenCV的源代碼,爲您的操作系統。
    2. 按照指示從源代碼構建openCV。
    3. 將jar複製到Java項目的lib目錄中。
    4. 通過將「本地庫位置」設置爲從源代碼構建openCV的路徑下的build/lib目錄,將jar配置爲查找其本機庫。
    5. 清潔構建Java項目,並且UnsatisfiedLinkError應該消失。

    此有關的步驟博客會談上面一步一步的細節:https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/

    爲什麼不能這只是一個簡單的罐子?

    因爲大多數openCV都是用C編程語言編寫的。而你使用的jar文件只是進入這個C世界的窗口。所以這是一臺rube Goldberg機器。在真實的工作世界裏,你會看到各種各樣的東西,所以要注意,你在這裏接受教育。

    +0

    爲了爲[Eclipse](https://eclipse.org/)生成合適的系統相關庫,必須編寫[OpenCV](http://opencv.org/)編譯規則,這與Java的可移植性思想相悖。順便說一句:* OpenCV *編譯帶來了另一個問題,如果你的GCC版本至少是'5':'/usr/include/host_config.h:105:2:錯誤:#錯誤 - 不受支持的GNU版本! gcc 4.10及以上版本不支持!'。詳細的Eclipse配置描述可在[這裏](http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/java_eclipse/java_eclipse.html#java-eclipse)。 –

    5

    試圖通過這樣做來加載庫:

    System.loadLibrary("opencv_java244") 
    

    或者通過這樣做:

    System.loadLibrary("opencv_java244") 
    

    沒有工作 - 仍然得到了同樣的錯誤。

    最後什麼工作是提供完整路徑dylib文件,並使用:

    System.load(new File("/usr/local/Cellar/opencv/2.4.10.1/share/OpenCV/java/libopencv_java2410.dylib").getAbsolutePath());' 
    

    我使用的是自制的,但無論你安裝它只是找到該文件,並uddate的路徑。

    0

    函數loadlibrary試圖在您的PATH變量中找到DLL的名稱 - 檢查DLL名稱。您也可以嘗試System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    0

    在這種情況下,你應該給了JVM到OpenCV的dll文件被作爲龍頭安裝路徑:-Djava.library.path =「C:\ OpenCV的\建設\ java的\ 64」 並添加如下代碼: System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 因爲我在netbeans IDE中試用了這個,我的問題就解決了。