7

c++ライブラリをandroidndk-Standaloneツールチェーンと正常にクロスコンパイルし、新しいandroidアプリケーションプロジェクトをEclipseに作成し、mylib.soをjniフォルダーに入れてndk-buildコマンドを実行すると正常に動作します

Prebuilt       : mylib.so <= jni/
Install        : mylib.so => libs/armeabi/mylib.so

しかし、追加するとき

static{
  System.load("/data/data/my_package/lib/mylib.so");
}

logcatでエラーが発生しました

   AndroidRuntime
   Caused by: java.lang.UnsatisfiedLinkError: Cannot load library:
   reloc_library[1306]:      36 cannot locate 'xmlCleanupParser'...``

私はそれをグーグルで検索しましたが、この問題を解決する方法が見つかりませんでした。

4

5 に答える 5

11

人々はほとんどの場合、ライブラリ名から「lib」プレフィックスをカットするのを忘れていました。したがって、「libusb.so」がある場合、コードはSystem.loadLibrary( "usb")..である必要があります。

于 2013-09-28T08:00:46.033 に答える
6

最近、同じエラーが発生しました。SOからの数十の提案を試した後、私はついにエラーが私のネイティブコードにあることに気づきました。androidndkが問題や警告なしにコンパイルしたとしても。

単純なmain関数を記述してネイティブコードをテストし、g ++ / gcc(または同様のもの)でコンパイルしてエラーをチェックしてみてください。

質問者には遅すぎることは知っていますが、他の誰かがこれが役立つことを願っています。

于 2014-10-15T10:52:50.020 に答える
5

-ディレクトリにコンパイル済みのネイティブライブラリ(.so-file)がlib/ある場合は、フルパスを使用せずに参照できます。

static{
  System.load("mylib");
}

チュートリアルに示されているように。


ヘッダーファイルに適切なパッケージが設定されているかどうかを確認してください:AndroidのNDKでjava.lang.UnsatisfiedLinkErrorを解決するにはどうすればよいですか?

于 2013-03-04T15:16:22.230 に答える
4
try {
       System.load("/data/data/<package name>/lib/libsample-jni.so");
    } catch (UnsatisfiedLinkError e) {
       System.loadLibrary("<sample-jni>"); //remove lib and .so from name
}

これはあなたを助けます、Pls。小切手。

于 2013-07-05T08:26:38.913 に答える
2

.soファイルを次のように指定してください。

 static {

     System.loadLibrary("mylib");

}

これがお役に立てば幸いです。

于 2013-03-04T15:17:50.357 に答える