NDK スタンドアロン ツールチェーンとバイオニックのいくつかの制限に基づいて、次の一般的な設定で crosstool-NG を使用して独自のツールチェーンを作成しました。
- binutils-2.22
- gfortran を有効にした gcc-4.5.3
- glibc-2.14.1
- カーネルヘッダー-2.35.7
- アーチアーム4t
これを使用して、実行可能ファイルをビルドし、libc、ld-linux などを含むすべての依存関係を Android デバイスにアップロードします。ld-linux.so.3 --library-path ... を使用して実行可能ファイルを手動で実行します。
これは非常に複雑な実行可能ファイルであり、system("pwd") や system(NULL) などの基本的なものであっても、system() 呼び出しを実行すると、ステータスとして 127 が返される (見つかりません) . さらに進んで、代わりに popen を使用して応答を収集すると、次のようになります。
* glibc が検出された *二重解放または破損
何が起こっている?誰かが同様のことで成功しましたか? 権限の問題はありますか? system() 呼び出しを不可能にする Android の根本的な違いはありますか? Bionic が system と popen (ソース コード) を最終的にどのように処理するかはどこで確認できますか? NDK を使用すると system() 呼び出しを実行できると思います。