-flto
を使用してプロジェクトをコンパイルする場合、--enable-gold
を使用してgccをビルドするだけで十分ですか、またはgoldをビルドしてldをそれに置き換える必要がありますか?そして、他のフラグが必要ですか?つまり、私はこれをやっています
gcc -flto one.c two.c
https://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements によれば、
"link time"という名前にもかかわらず、LTOは特別なリンカー機能を使用する必要はありません。必要な基本的なメカニズムは、オブジェクトファイル内のGIMPLEセクションの検出です。これは現在_
collect2
_で実装されています。したがって、LTOはGCCですでにサポートされているすべてのリンカーで動作します。
さらに、_-Fuse-linker-plugin
_の GCCドキュメント は次のように述べています。
このオプションは、GCCのLTOサポートが有効で、GCCがリンカーをサポートするプラグイン(GNU ld 2.21以降またはゴールド)で使用するように構成されている場合、デフォルトで有効になります。
したがって、特別な「リンカープラグイン」機能を使用してライブラリアーカイブ内のオブジェクトファイルから最適化情報を取得する場合でも、gold
はまったく必要ありません。
_-flto
_のドキュメント に使用例があります。どちらか
_ gcc -o myprog -flto -O2 foo.c bar.c
_
または
_ gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
_
動作します。
GCC 4.9 以降、リンクに_-flto
_は必要ありません。
覚えておくべき重要なことは、リンク時の最適化を有効にするには、GCCドライバーを使用してリンク手順を実行する必要があるということです。関係するオブジェクトのいずれかが_
-flto
_でコンパイルされている場合、GCCはリンク時の最適化を自動的に実行します。
そして GCC 5 以降:
以前のGCCリリースとは異なり、リンクコマンドラインで渡された最適化およびターゲットオプションは無視されます。