GCC および ld ビルドでの未使用シンボルの最適化された削除
実行可能ファイルをビルドするとき、特に ARM ベースの組み込みシステムの場合、実行可能ファイルのサイズを最適化する必要があります。パフォーマンスを向上させるために重要です。注目すべき問題の 1 つは、バイナリ内に未使用のシンボルが存在し、不必要な肥大化を引き起こすことです。
GCC および LD 環境でこの問題を軽減するために、2 段階のアプローチが採用されています。
ステージ 1: コード セクションの分離
コンパイラ フラグの使用-fdata-sections および -ffunction-sections は、各翻訳単位内のコードを関数、クラス、および外部変数を表す個別のセクションに分割するようにコンパイラーに指示します。これにより、未使用のシンボルの分離が可能になります。
ステージ 2: 未参照セクションの破棄
リンク フェーズ中に、最適化フラグ -Wl,--gc を使用してリンカーを呼び出します。 -sections は、リンカーが参照のないセクションを破棄するようにトリガーします。これにより、未使用のシンボルが最終的な実行可能ファイルから確実に除外されます。
たとえば、2 つの関数 (そのうち 1 つは未使用) を含むファイル test.cpp を考慮すると、次のコマンドは未使用の関数を省略した実行可能ファイルを生成します。
gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections
この 2 段階のアプローチを組み込むことで、未使用のシンボルを効果的に削除でき、最終的な実行可能ファイルのサイズが大幅に削減され、それによってロード パフォーマンスが向上します。リソースに制約のある組み込みシステム。
以上がGCC および ld ビルドを最適化して未使用のシンボルを削除し、実行可能ファイルのサイズを減らすにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。