<stdlib.h>
Cプログラムにまたは を含める場合<stdio.h>
、コンパイル時にこれらをリンクする必要はありませんが、 にリンクする必要があります<math.h>
。-lmGCC の場合、たとえば次のようになります。
gcc test.c -o test -lm
その理由は何でしょうか? なぜ数学ライブラリを明示的にリンクする必要があるのに、他のライブラリはリンクする必要がないのでしょうか?
ベストアンサー1
およびの関数は(または静的リンクの場合) に実装されstdlib.h
てstdio.h
おり、デフォルトで実行ファイルにリンクされます(指定された場合)。GCC は、この自動リンクを回避するように指示できます。libc.so
libc.a
-lc
-nostdlibまたは-デフォルトライブラリなしオプション。
の数学関数は でmath.h
実装されておりlibm.so
(またはlibm.a
静的リンク用)、libm
デフォルトでは にリンクされません。このlibm
/libc
分割には歴史的な理由がありますが、どれもあまり説得力がありません。
興味深いことに、C++ ランタイムにはlibstdc++
が必要なので、GCC ( )libm
を使用して C++ プログラムをコンパイルすると、自動的にリンクされます。g++
libm