4

ライブラリと実行可能ファイルがあり、ライブラリに静的にリンクされます。最終的な実行可能ファイルのプログラム スペースを最小限に抑えたいと考えています。

avr-libc のドキュメントによると:

リンカーは、関数が配置されているオブジェクトモジュール全体でリンクします

一方、私の同僚は、あるパスでリンカが未使用の関数を破棄するという点で一致しています。

では、誰が正しいのですか、それとも私は何かを誤解していますか? 答えはgcc全体で一貫していますか、それともここではavrポートだけを話しているのですか?

4

1 に答える 1

9

指示しない限り、デッド コード ストリッピングは実行されません。そのためには、次のようにすべてをコンパイルする必要があります。

-fdata-sections -ffunction-sections

すべてのデータと機能をマークするため。そして、GCC とリンクするときは、以下を渡す必要があります。

-Wl,--gc-sections

すべての未使用セクションをガベージ コレクションするため。

于 2012-11-23T09:18:16.347 に答える