6

新しい android ndk r8e を使用してソース (SDL など) をコンパイルしたかったのです。変更ログには、「GCC 4.7、4.6、Clang 3.2、および Clang 3.1 で -flto を有効にしました」と記載されています。そこで、LOCAL_CFLAGS、LOCAL_CPPFLAGS、LOCAL_LDFLAGS に -flto を追加しました。しかし、最適化フラグとアーキテクチャ フラグはリンカー呼び出しには含まれていないため、最適化は行われません (スロー バイナリとも呼ばれます)。一部の .S ファイルから関数を見つけることができず、サム モードで一部の命令を使用できないため、リンカも失敗します。-flto がなくてもすべて正常に機能しました。

では、リンク時の最適化を正しく使用する方法と、この問題を回避する方法は? いいえ、独自の最適化/アーキテクチャ フラグを LOCAL_LDFLAGS に追加することは答えではありません。なぜなら、独自のハック ビルド スクリプトではなく NDK を使用したいからです。

リンク時の最適化は、独自のビルド スクリプトを使用して amd64 (Android 以外) でもテストされ、正常に動作しました (コンパイル、リンク、20% の速度向上)。そのため、NDK ビルド システムへの回答を保管しておいてください。

4

0 に答える 0