2011-09-15 3 views
0

私はJNIを使​​用するAndroidアプリケーションを開発しています。UnsatisfiedLinkErrorの問題

コマンドjavah -jni com.company.tests.MainRendererが私にこの出力を与えた:

/* 
* Class:  com_company_tests_MainRenderer 
* Method: nativeInit 
* Signature:()V 
*/ 
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeInit 
    (JNIEnv *, jclass); 

/* 
* Class:  com_company_tests_MainRenderer 
* Method: nativeRender 
* Signature:()V 
*/ 
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeRender 
    (JNIEnv *, jclass); 

をコマンドnm -Ca libRotateJNI.soは私に、この出力を与えた:

00001c25 T Java_com_company_tests_MainRenderer_nativeInit(_JNIEnv*, _jclass*) 
00001c29 T Java_com_company_tests_MainRenderer_nativeRender(_JNIEnv*, _jclass*) 

を。これは、これらの関数を定義する方法です。

void Java_com_company_tests_MainRenderer_nativeInit(JNIEnv* env, jobject thiz) 
{ 
    // ... 
} 

void Java_com_company_tests_MainRenderer_nativeRender(JNIEnv* env, jobject thiz) 
{ 
    // ... 
} 

そして、このメッセージで実行してください:

WARN/dalvikvm(639): No implementation found for native Lcom/company/tests/MainRenderer;.nativeInit()V 

ライブラリが読み込まれていると思います。この問題を解決するにはどうすればいいですか?

答えて

4

あなたのネイティブメソッドをC++コンパイラでコンパイルして、extern "C"リンケージを与えていないと思われます。 nmに提供している-Cオプションは、C++の名前をデマングルしますが、実際には、コードはC++リンケージでコンパイルされているため、JVMが探している名前とは異なる名前になっています。 extern "C"ブロックにC++コードを入れてください。これで問題が解決するはずです。

0

私はあなたのMainRendererが何であるかを知らないとあなたがヒットしているが、私のCファイル関数は、常にこのような何かを見て、ネイティブ何図書館:私は呼び出しています

void Java_com_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { 

メソッド/クラスはNDKFooActivityとその呼び出しですネイティブ関数...

関連する問題