6

ネイティブコードのAndroidプロジェクトがあります。このネイティブパートでは、OpenCVを使用します。OpenCV 2.3.1を使用すると、すべてがコンパイルされて正常に動作しますが、バージョン2.4.1に切り替えようとすると、問題が発生しました。

エラーなしでコンパイルされますが、アプリを起動すると、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)

Open CVがlibopencv_java.soを読み込もうとしているようですが、私はそれを必要とせず、JavaコードでOpenCVを使用していません。このライブラリのサイズは5Mを超えています。

このライブラリをプロジェクトに追加せずにコンパイルするにはどうすればよいですか?

4

2 に答える 2

7

C ++ OpenCVインターフェイスへのJNIラッパーに加えてlibopencv_java.soには、すべてのOpenCVネイティブコードが含まれています。
Android用のOpenCV2.4を使用してJNIライブラリを構築する場合、libopencv_java.so(デフォルトオプション)と動的にリンクしてAPKに含めるか、このオプションを明示的に追加して静的にリンクすることができます。

include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
include <your path>/OpenCV.mk
于 2012-06-05T12:12:15.580 に答える
1

2.3から2.4にアップグレードしたとき、次のバリエーションが機能しました(アプリケーションにJNIパーツがある場合は、手順に従ってください。詳細は下部のリンクにあります)。

1 / Android.mkのパスを置き換えて、OpenCV.mkリンクが引き続き機能するようにします(2.4では、share /OpenCV/ではなくnative/jni /にあります)。

2 /次に、OpenCV.mkを含める前にこれを記述します。

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

他のライブラリもコピーできます(例:下部のリンクで使用されているOPENCV_CAMERA_MODULES)

3 /その後、Activityクラスの静的セクションで、ライブラリをロードできます(ライブラリを他のライブラリに依存する前にロードします)。

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

また:

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

(2番目はきれいに見えますが、まだ試していません)

ソース(パーツ用)は、リンクのステップ3と4です:静的初期化を使用したアプリケーション開発

于 2013-06-26T01:37:11.980 に答える