2

私は、いくつかのネイティブ C++ ライブラリを持つ Android プロジェクトに取り組んできました。ADT プラグインを使用した Eclipse を使用したコンパイルとデバッグはうまく機能します。明らかに、Android NDK は一部のバージョンの arm-linux-gnueabi-gcc を使用してネイティブ ライブラリをコンパイルします。

NEON組み込み関数を多用しているので、ネイティブライブラリをARMの公式コンパイラでコンパイルしてみたいと思いますarmccarmcc組み込み関数を使用するときに、より最適化されたコードを提供するはずのあらゆる場所を読みました。そこで、ARM の Web サイトから DS-5 の試用版をダウンロードして、実際に速度の違いがあるかどうかを確認しました。

DS-5 は、ARMCC ツールチェーンを使用する Eclipse の単なる修正版のように見えるので、ADT プラグインをインストールしました。しかし、DS-5 を使用してコンパイルすると、コードはまだgccではなくを使用して生成されているようですarmcc

DS-5 または Eclipse に Android ネイティブ コードを強制的にビルドさせる方法はありますarmccか? または、コマンド ラインから静的 NDK ライブラリをビルドし、プロジェクト内のライブラリを置き換えて、テスト用の電話にデプロイすることは可能ですか (およびその方法は?)

4

2 に答える 2

2

ARM DS-5 Community EditionARM compilerには( )は含まれていませんarmcc

armcc処理の重いアルゴリズムを個々のコンパイル ユニット (別の C ファイル) に分離するのが最善の方法であるarmcc場合は、コンパイル ユニットの場合と同様にそれらを使用してビルドします。オブジェクト ファイルを取得したら、それらをアーカイブに変換し、それを Android.mk で として使用しLOCAL_STATIC_LIBRARIES += <your_archive>ます。

armcc主に依存関係のために、Android互換ライブラリを構築するために単純に使用することはできないBionicと思います。

于 2013-06-24T08:55:56.087 に答える
0

armccAndroid には別の C ライブラリがありますが、Android 互換の静的ライブラリをビルドするために使用できます( bionic)。キーは の--library_interfaceフラグですarmccドキュメントによると:

ABI 準拠の C ライブラリとリンクする場合は、 --library_interface=aeabi_* の形式のオプションを使用します。--library_interface=aeabi_* 形式のオプションは、ARM C ライブラリによって提供される最適化された関数への呼び出しをコンパイラが生成しないようにします。

さらに、Android EABI との互換性を確保するためのフラグがさらにいくつかあり、Androidarmeabi-v7aターゲットに対して次のコマンドが生成されます。
armcc --library_interface=aeabi_clib --wchar32 --enum_is_int --no_hide_all --cpu=7-A --fpu=softvfp+vfpv3 -c -o libfunc.o libfunc.c

次に、 を使用armar --create libfunc.a libfunc.oして、Android NDK にリンクできる静的ライブラリをLOCAL_STATIC_LIBRARIES.

Android KitKat 4.4.2 の Android NDK r10d でこれを正常にテストしました。

于 2015-11-19T23:11:46.187 に答える