1

Linuxで.soファイルとしてコンパイルされた他の外部ネイティブライブラリが必要なNDK共有ライブラリを実装しようとしました。

次の関係があります: libl1 は libl2 に依存します。

ビルド済みの libl2.so を共有として試し、libl1 モジュールに追加しました。次のようにlibl1をロードすると、すべてが正常にコンパイルされ、LG Nexus 4で正常に動作します。

static {
  System.loadLibrary('l1');
}

ただし、Samsung 4.03 Android バージョンでは動作しません。このデバイスでは、次のコードで動作します。

static {
  System.loadLibrary('l2');
  System.loadLibrary('l1');
}

Android ClassLoader が依存関係を読み込めないことがわかりました。しかし、Nexus 4 で正常に動作するのはなぜですか? しかし、Samsung デバイスではありませんか?

4

1 に答える 1

2

Nexus4 で見られる動作は予期されたものではなく、少なくとも v. 4.2.2 (ビルド JDQ39) では特別な処理がないことを再度テストしました。Nexus に他の Android がインストールされている可能性がありますか? /system/lib/libl2.so何らかの理由でデバイスにファイルがある可能性がありますか?

Samsung デバイスの動作は予期されたものであり、Android チームが正しいと考えているものです。すべての共有ライブラリは、Java からの依存関係の順序でロードする必要があります。または、必要に応じていつでもdlopen()明示的に呼び出すことができますが、リンカーを使用してこれらの共有ライブラリ全体の関数参照を解決する単純さはすべて失われます。

于 2013-10-08T08:38:13.103 に答える