Android 2.3.3 で OpenCV 2.4.0 ネイティブ コードを使用したい。そのために、NDK リリース 8 を使用して、Windows 7 でスクリプトをlib.so
使用して共有ライブラリをndk-build.cmd
ビルドしました。Eclipse を使用してプロジェクトを作成し、.apk ファイルをビルドしました。
ここに問題があります。Java コードで ) をUnsatisfiedLinkError
使用して共有ライブラリをロードしようとすると、例外がスローされます。NDK のhello-jniサンプルでSystem.loadLibrary(
同じことを試してみましたが、まったく問題なく動作します。
このページの指示に従って、プロジェクトを作成しAndroid.mk
、Application.mk
ファイルを作成しました。
ここに私のJavaコードがあります:
package my.package.ocvtest1
// import android.foo.bar statements
public class OCVTest1 extends Activity
{
public void onCreate(Bundle savedInstance)
{
super.onCreate(Bundle savedInstance)
// code to display strings returned by native functions
}
public native String funtionName1();
public native String functionName2();
static
{
System.loadLibrary("ocvtest1");
}
}
(Project dir)/jni/ocvtest1.c
ネイティブ関数を実装するファイルは次のとおりです。
#include <jni.h>
// Other header files and some global variables
jstring Java_my_package_ocvtest1_OCVTest1 (JNIEnv *ptr, jobject obj)
{
// code here
}
jstring Java_my_package_ocvtest1_OCVTest1_functionName2 (JNIEnv *ptr, jobject obj)
{
// code here
}
// End of file
私はこの問題をグーグルで調べて解決策を試しましたが、それらの解決策を実装した後でもこの例外が発生します。これまでに試したすべてのことは次のとおりです。
libopencv_java.so
およびスタティック*.a
ライブラリ ファイルを(Project dir)/libs
およびフォルダにコピーしてダイナミック リンクを使用し(Project dir)/obj/local
、Java ソース コードのスタティック ブロックを
static
{
System.loadLibrary("opencv_java");
System.loadLibrary("ocvtest");
}
OPENCV_LIB_TYPE:=STATIC
以下のように追加して静的リンクを使用
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
include (<Path to Opencv.mk>)
javah.exe my.package.OCVTest1
動的リンクの使用中にコマンド プロンプトで実行することによって生成されるインクルード ヘッダー ファイル。
ファイル内の abi バージョン変数を に変更armeabi-v7a
しました。armeabi
Application.mk
上記のすべての変更について、ライブラリ ファイルがアプリの lib フォルダーに読み込まれたことを確認するために、次のコマンドを実行しました。
adb push <path to library on disk> <path to /lib in app>
これにより、ライブラリ ファイルが電話機の適切なディレクトリにコピーされました。
この修正をすべて試した後でも、この例外を解決できません。