7

NDK コンパイル コード (コマンド ライン プログラム) を実行している Android アクティビティがあります。

Runtime.getRuntime().exec(myCommand);

必要な共有ライブラリを次のようにロードします。

static {
    System.loadLibrary(myLib);
}

しかし、プロジェクトを実行してエラーストリームからの出力を印刷すると、次のエラーが発生します。

link_image[1963]:  7520 could not load needed library 'libmyLib.so' for './myCommand'
(load_library[1105]: Library 'libmyLib.so' not found)CANNOT LINK EXECUTABLE

libmyLib.soディレクトリの下のプロジェクトに存在し、libs/armeabi/ディレクトリの下の Android デバイスにコピーされていることを確認します/data/data/myProject.path.package/lib/。実行可能ファイルとライブラリの両方の所有者とグループはsystem:system、パーミッションも問題ありません。

最初に adb シェルからコマンドを実行すると、同じエラーが発生しますが、設定LD_LIBRARY_PATHして問題なく実行できます。

./adb shell
export LD_LIBRARY_PATH=/data/data/myProject.path.package/lib:$LD_LIBRARY_PATH
/data/data/myProject.path.package/myCommand

問題は、Java Android プロジェクトからそれを行う方法ですか?

注: GT-P1010 で Linux、Eclipse + Sequoyah、NDK-r5b、Android 2.3.6 (API 10) を使用しています。

4

1 に答える 1

5

解決済み: を使用できますexec(String prog, String[] envp)。私の場合、これは次のとおりです。

String[] envp = {"LD_LIBRARY_PATH=/data/data/cse.ecg.dcmtk/lib:$LD_LIBRARY_PATH"};
Runtime.getRuntime().exec(myCommand, envp);

現在の問題はexec()、実行されたプロセスでホスト名を解決できないことです (adb シェルから解決します。インターネット許可が設定されています)。それについて何かヒントはありますか?

于 2012-04-30T09:54:40.863 に答える