オブジェクトレベルについてはわかりませんが、 と を使用してシンボルレベルでこれに取り組むことができると思います。これにより、参照されていないすべてのシンボルのコードが削除され、削除されたシンボルも表示されます。これは、何らかの理由でオブジェクト ファイル レベルに戻り、削除されたシンボルのみを含むオブジェクト ファイルを識別したい場合に役立ちます。CFLAGS="-fdata-sections -ffunction-sections"
LDFLAGS="-Wl,--gc-sections -Wl,--print-gc-sections"
より正確には、引用したコンパイラ フラグは、コンパイラに各関数またはグローバル変数をそれ自体のセクションに配置するように要求し、--gc-sections
リンカー フラグは使用されていないすべてのセクションを削除します。オブジェクト ファイル内のすべての関数が 1 つのセクションを共有している場合でも、各オブジェクト ファイルには独自のセクションが含まれている可能性があります。その場合、リンカ フラグだけで、使用されていないオブジェクト全体を削除するという、求められていることを実行する必要があります。gcc のマニュアルには、コンパイラ フラグによってオブジェクト サイズが大きくなると記載されています。最終的な実行可能ファイルがこの影響を受けないことを願っていますが、確かなことはわかりませんLDFLAGS="-Wl,--gc-sections
。
リストされたオプション名は、バイナリのサイズを縮小する方法に関する他の提案を stackoverflow で検索するのに役立つキーワードになる場合があります。gc-sections
たとえば、現時点で 62 件の一致が得られます。