auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語のmath.hをコンパイルする

auです。
今回はヘッダファイルの"stdio.h"や”string.h”をコンパイルする際にオプションはいらないのに、"math.h"をコンパイルする際は"-lm"を付けなければならないのかを調べてみました。

math.hを使う

math.h(数学関数)の中には
double pow(double x, double y) xのy乗を計算する関数
double fabs(double x) xの絶対値を計算する関数
など、通常のプログラムでは使わない、高度な計算をするときに使うような関数が入っているライブラリです。
このような関数は、普通のプログラムでは使われません。そこで、-lmをつけて、"libm.a"という共有ライブラリとリンクしなければなりません。
stdio.hやstring.hの標準ライブラリと呼ばれるものは、一般的な関数が入っているので、オプションを付けなくても大丈夫です。

なぜリンクが分かれているかは調べてもよくわかりませんでした。
自分の予測では、標準ライブラリと混ぜてしまうとよくない挙動をするのかな?と思いましたが、正直よくわかりません。
もしわかる方がいらっしゃいましたらコメントをお願いします。