2012-06-05 35 views
6

我有一個android項目,它具有本機代碼。在這個本地部分我使用OpenCV。 一切編譯,當我使用OpenCV的2.3.1工程確定,但是當我試圖切換到2.4.1版本,我面臨的問題:OpenCV 2.4.1:UnsatisfiedLinkError

它編譯沒有任何錯誤,但是當我開始我的應用程序,它可以」由於UnsatisfiedLinkError而加載我的庫。

Cannot load library: link_image[1936]: 37 could not load needed library 'libopencv_java.so' for 'mylibrary.so' (load_library[1091]: Library 'libopencv_java.so' not found) 

我看到打開CV嘗試加載libopencv_java.so,但我並不需要它,我不在Java代碼中使用OpenCV的。這個圖書館的大小> 5M。

如何編譯時不將這個庫添加到項目中?

+0

這是實際更新[我的問題]( http://stackoverflow.com/questions/10857301/unable-to-link-native-library-in-opencv-android-sample)。你確定你的'Android.mk'包含行'OPENCV_LIB_TYPE:= STATIC'嗎? – ArtemStorozhuk

+0

你在回答中標記了你的問題,所以我認爲你可以在你的項目中包含libopencv_java.so。但是如果可能的話,我想排除它。 – Arseniy

+0

是的,我知道。我說更新不重複:)那麼,我的問題呢? – ArtemStorozhuk

回答

7

libopencv_java.so除了JNI包裝以外,C++ OpenCV接口還包含所有的OpenCV本地代碼。
當你通過明確添加此選項的OpenCV 2.4建立你的JNI庫爲Android您可以用鏈接動態 libopencv_java.so(默認選項),並將其包含到您的APK或鏈接靜態

include $(CLEAR_VARS) 
OPENCV_LIB_TYPE:=STATIC 
include <your path>/OpenCV.mk 
+3

這對我沒有用。例如,默認的opencv adnroid示例#3。看到這[問題](http://stackoverflow.com/questions/10857301/unable-to-link-native-library-in-opencv-android-sample)。 – ArtemStorozhuk

+0

已將我的代碼更改爲使用新式動態鏈接。 – Arseniy

1

的變化以下工作對我來說,當我從2.3升級到2.4(按照說明,如果你在你的應用程序中的JNI部分在底部的鏈接詳細信息。):在

1 /替換路徑那麼Android.mk OpenCV.mk鏈接仍然有效(在2.4版本中是native/jni /而不是share/OpenCV /)。

2 /然後寫這樣你包括OpenCV.mk之前:

OPENCV_INSTALL_MODULES:=on 
(this copies libopencv_java.so to your project's lib folder) 

可以複製其他庫以及(例如OPENCV_CAMERA_MODULES如在底部鏈路中使用)

3 /之後,在您的活動類的靜態部分,您可以加載(即依賴於它在別人面前加載庫)的庫:

System.loadLibrary("opencv_java"); 
(this loads libopencv.so) 

或:

if (!OpenCVLoader.initDebug()) { 
    // Handle initialization error 
}) 

(第二似乎更清潔,但我還沒有嘗試過)

源(零件)是在鏈接步驟3和4:Application Development with Static Initialization

+0

您可能需要刪除舊的加載庫的嘗試(例如,將它們加載到LOCAL_LDLIBS中) – studiou

相關問題