this questionを参照して:gccはどのライブラリに暗黙的にインクルードするかをどのように決定しますか?
小さなマイクロの埋め込みプロジェクトでは、コンパイルされたコードサイズが予想よりもはるかに大きいことがわかりました。 assert()を使用したコードが含まれていたためです。 assertの使用はインクルードされたコードでは適切でしたが、コンパイルされたコードサイズはほぼ倍増しました。
アサルトを使用するべきであるが、アサーションに必要なすべてのオーバーヘッドをコンパイラ/リンカがどのように組み込むかを決める際に、問題はありません。他のポストから
私の元の質問:
誰かがgccがアサートが呼び出されたときに、ライブラリの関数を含めることを決定した方法を私に説明することができれば便利でしょうか? assert.hが外部関数__assert_funcを宣言していることがわかります。リンカーは、単に "__asert_funcへの未定義の参照"というより、ライブラリからそのリンカーを参照する方法を知っていますか?
これはまさにそれがしたことです。 stdioやprintfなどに引っ張られました...私はいくつかの素朴な理由から、リンカはlibcを含むすべてのライブラリにリンクする必要があると仮定していました。 –