4

私は、ネイティブ C コードに JNI を使用した Android アプリケーションに取り組んでいます。このアプリケーションを Android 2.0 バージョンと ndkr3 でビルドすると、正常に動作します。

Android SDK バージョン 1.5 と API バージョン 3 を変更したとき、ライブラリ libtest_demo.so を開けないという問題に直面しました。

05-13 16:54:23.603: INFO/dalvikvm(1211): Unable to dlopen(/data/data/org.abc.test_demo/lib/libtest_demo.so): Cannot find library

libtest_demo.so ファイルを同じ場所 /data/data/org.abc.test_demo/lib/libtest_demo.so に配置しましたが、それでも同じ問題が発生します。

私のJavaファイルでは、次のようなネイティブライブラリを呼び出しました

 System.loadLibrary("abc_jni");
 System.loadLibrary("test_demo");

logcat から、両方のライブラリが同じメモリ アドレスを使用していることがわかりました。

これは logcat の出力です

05-13 17:56:15.732: DEBUG/dalvikvm(9897): Trying to load lib /data/data/org.abc.test_demo/lib/libabc_jni.so 0x437317f8
05-13 17:56:15.732: DEBUG/dalvikvm(9897): Added shared lib /data/data/org.abc.test_demo/lib/libabc_jni.so 0x437317f8
05-13 17:56:15.742: DEBUG/dalvikvm(9897): Trying to load lib /data/data/org.abc.test_demo/lib/libtest_demo.so 0x437317f8 
05-13 17:56:15.752: INFO/dalvikvm(9897): Unable to dlopen(/data/data/org.abc.test_demo/lib/libtest_demo.so): Cannot find library
4

1 に答える 1

7

このエラーはほとんどの場合「ライブラリが見つかりません」と表示されますが、これには多くの理由が考えられます。面倒なことは、ほとんどの場合、それは不足しているライブラリではなく、他の何かであるということです。私がつまずいた理由:

  • ディレクトリにライブラリがありません (明らかに)。
  • ライブラリに動的にリンクされているライブラリが見つからない、
  • ライブラリが使用するデバイス/エミュレーターのシステム ライブラリ バージョンは、コンパイル時にリンクしていたものとは異なります (シンボルの欠落など)。

エミュレータでは正常に動作し、Nexus One ではロードに失敗していたライブラリの問題を解決する際に役立つ方法について説明しました。デバッグ-dlopen-unsatisfiedlinkerror.html

于 2010-09-16T08:24:36.250 に答える