C言語で数学ライブラリをリンクする必要があるのはなぜですか? 質問する

C言語で数学ライブラリをリンクする必要があるのはなぜですか? 質問する

<stdlib.h>Cプログラムにまたは を含める場合<stdio.h>、コンパイル時にこれらをリンクする必要はありませんが、 にリンクする必要があります<math.h>-lmGCC の場合、たとえば次のようになります。

gcc test.c -o test -lm

その理由は何でしょうか? なぜ数学ライブラリを明示的にリンクする必要があるのに、他のライブラリはリンクする必要がないのでしょうか?

ベストアンサー1

およびの関数は(または静的リンクの場合) に実装されstdlib.hstdio.hおり、デフォルトで実行ファイルにリンクされます(指定された場合)。GCC は、この自動リンクを回避するように指示できます。libc.solibc.a-lc-nostdlibまたは-デフォルトライブラリなしオプション。

の数学関数は でmath.h実装されておりlibm.so(またはlibm.a静的リンク用)、libmデフォルトでは にリンクされません。このlibm/libc分割には歴史的な理由がありますが、どれもあまり説得力がありません。

興味深いことに、C++ ランタイムにはlibstdc++が必要なので、GCC ( )libmを使用して C++ プログラムをコンパイルすると、自動的にリンクされます。g++libm

おすすめ記事