2012-03-24 5 views
2

私のネイティブアプリに必要なメモリが少ない小さなAndroidシステムを構築しました。Androidクロスツールチェーン(libC++とlibmなしでのリンク)のデフォルトのlibリンケージの変更方法

私はすべての私のアプリは、彼らがCで純粋に書かれていたにもかかわらずlibm.solibstdc++.soにリンクすることを発見し、libm内の任意の関数を使用していない(例えばsin())。 libは20Kを超えるメモリーを使用します。

libstdc++libmのリンケージを削除するにはどうすればよいですか?

答えて

1

Androidは、原則として目標を却下することなく、多くのシステムライブラリをメモリにプリロードしたzygoteプロセスの子供をフォークすることで、すべてのアプリケーションで共有されるようにアプリケーションを起動します。多くのdalvikクラスもプリロードされています。

これらの共有マッピングを継承するため、実際にはほとんどの物理メモリが消費されます。アプリケーションが実行される各子プロセスでは、プリロードライブラリとクラスは、プリロードされたコードスペースのデータと、スペース。

このため、実際には、すべてのアプリケーションに大量のものしか必要としないものを提供するためにメモリを節約し、必要なものに自分自身の(共有できない)コピーをロードする必要がありません。また、ndkライブラリを作成した開発者はCのみを使用することがありますが、アンドロイドアプリ全体は、プラットフォームコードの一部に含まれているため、不可避的にC++プログラムです。

+0

+1 .. dalvikはすでにlibmとlibstdC++にリンクされているので、ndkライブラリがロードされているプロセスにマップされていることになります。私は無意味な答えを削除しました:-) – richq

関連する問題