ARMAndroidアプリケーション用のNEONベースのコードを書いていますが、特定のコンパイラフラグが認識されないことに苦労していました。後でそれらのサポートに気づきました。フラグはごく最近追加されたばかりで、私のGCCバージョンは古いです。私はWindowsですべてを行っており、Cygwinが提供するバージョンによって制限されています。これが私の質問です。GCC4.6.0をビルドする前に私のWindowsマシンでCygwinをそのようにしていますが、それは私のために機能しますか、それともNDKは独自のバージョンのGCCを使用しますが、アップグレードはまったく影響しませんか? ?
NDK自体は、arm-eabi-gcc
コンパイラー上に構築されたカスタマイズされたクロスコンパイラーを呼び出します。 ARM命令セットをサポートするbog-standardGCC実装を使用してカスタムツールチェーンを作成する人々の例がありますが、それは私のリーグからは程遠いです。私が過去に読んだもののほとんどはネイティブコードをコンパイルするためにNDKに含まれているツールチェーンを使用して常に議論されます。
当然の結果:不平を言い、独自のツールチェーンを作成しなければならなかった人々のほとんどは、NDKツールチェーンのコンパイラの(想定される)サブパーC++サポートに腹を立てた人々でした。一部の記事が古く、Androidが非常に急速に変化するため、これについて話すことはできません。また、あまり頻繁に出てくるような意見でもありません。
NDK r8dに関しては、2つの方法で変更できます( Andriod ndk を参照)。
--toolchain=arm-linux-androideabi-4.7
デフォルトのコンパイラはndk/build/core/setup-toolchain.mkに設定されています(NDK_TOOLCHAINおよびNDK_TOOLCHAIN_VERSIONを参照)
NDK 11(2016年3月)の時点で、GCCは廃止され、clangが優先されます
公式の改訂履歴について言及: https://developer.Android.com/ndk/downloads/revision_history.html
コンパイラを切り替える方法は、次の場所で尋ねられます。
そして、あなたはそれを簡単にチェックすることができます:
enum CONSTEXPR {N = 256};
char s[N];
#ifdef __clang__
snprintf(s, N, "%s", "clang" __clang_version__);
#else
# ifdef __GNUC__
snprintf(s, N, "%s %d.%d.%d", "gcc", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
# endif
#endif
次に、s
をログに記録するか、TextView
に返します。