ホームページ >バックエンド開発 >C++ >GCC と ld を使用して C/C 実行可能ファイルから未使用のシンボルを削除するにはどうすればよいですか?

GCC と ld を使用して C/C 実行可能ファイルから未使用のシンボルを削除するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-28 07:55:14676ブラウズ

How to Strip Unused Symbols from C/C   Executables with GCC and ld?

GCC と ld を使用して C/C 実行可能ファイル内の未使用のシンボルを削除する方法

はじめに

組み込みシステムまたはリソースでは、実行可能ファイルのサイズを最適化することが重要になる場合があります-制約された環境。これを実現するには、実行可能ファイルから未使用のシンボルを削除することが重要です。

GCC および ld シンボルの除去

GCC および ld には、コンパイルおよびリンク中に未使用のシンボルを破棄するオプションが用意されています。

GCCオプション

  • -fdata-sections: コードとデータを各翻訳単位の個別のセクションに分割します。
  • -ffunction-sections:関数を個々のセクションに分割します。

ldオプション

  • -Wl,--gc-sections: ld に参照されていないセクションを破棄するように指示します。

実装

削除するには未使用のシンボルについては、次に従ってください手順:

  1. -fdata-sections フラグと -ffunction-sections フラグを使用して GCC でソース ファイルをコンパイルします。
  2. -Wl,--gc-sections フラグを指定した ld を使用してオブジェクト ファイルをリンクします。 .

ファイルがあるとします。 test.cpp には 2 つの関数が含まれており、そのうちの 1 つは未使用です:

int use(int a);
int unused(int a);

未使用の関数を削除するには、次のようにコンパイルしてリンクします:

gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections

このコマンドは GCC に分離するように指示します。コードとデータをセクションに分割し、ld で参照されていないセクションを破棄することで、実行可能ファイルのサイズが小さくなります。

以上がGCC と ld を使用して C/C 実行可能ファイルから未使用のシンボルを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。