2014-04-09 47 views
0

我試圖在Mac上使用OpenCV中的函數創建我的應用程序的可執行jar。然而,當我試圖在Eclipse中創建的jar我得到這個錯誤:在eclipse中創建一個包含外部庫(OpenCV)的jar文件

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java248 in java.library.path 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886) 
at java.lang.Runtime.loadLibrary0(Runtime.java:849) 
at java.lang.System.loadLibrary(System.java:1088) 
at imageRegistration.ImageGUI.main(ImageGUI.java:643) 

我認爲錯誤是因爲有鏈接到OpenCV的罐子並沒有被打包與它名爲.dylib文件。

我找到了this,這似乎是我遇到的同樣的問題,但該解決方案對我無效。這是我做了什麼:

public static void libLoad(){ 
    try{ 
    InputStream in = ImageGUI.class.getResourceAsStream("/lib/opencv-2.4.8 MAC/build/lib/libopencv_java248.dylib"); 
    File fileOut = File.createTempFile("lib", ".dylib"); 

    OutputStream out = FileUtils.openOutputStream(fileOut); 
    IOUtils.copy(in, out); 
    in.close(); 
    out.close(); 
    System.load(fileOut.toString()); 
    } catch(Exception e) { 
     System.out.println("Failed to load opencv native library \n" + e); 
    } 
} 

我得到的錯誤,當我運行是這樣的:

Failed to load opencv native library 
java.lang.NullPointerException 

編輯:以下是完整的堆棧跟蹤:

java.lang.NullPointerException 
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792) 
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) 
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) 
    at imageRegistration.ImageGUI.libLoad(ImageGUI.java:624) 
    at imageRegistration.ImageGUI.main(ImageGUI.java:643) 

回答

0

您需要打印完整的堆棧跟蹤,NPE來自哪裏並不清楚。很可能ImageGUI.class.getResourceAsStream返回null。如果這是真的,則是因爲路徑錯誤或lib不在jar中

+0

好吧,我已經用堆棧跟蹤更新了問題。 – user2916314

+0

目前我正在添加jar,然後將.dylib文件添加到本機庫路徑。 lib會在jar嗎? – user2916314

+0

嘗試System.load(fileOut.getAbsolutePath()); –

0

您可以嘗試將本地OpenCV DLL文件放在JRE的bin目錄下。至少它對我有用

+0

如果我分享該應用程序,這項工作是否可行? – user2916314

+0

我還沒有試過其他機器。我不明白爲什麼不這樣做:) –

相關問題