gccでmath.hの関数を使うソースがコンパイルできない場合の対処法

例えばこんな感じでfloor()を使うCのプログラムtest.cがあったとして、

/* test.c */
#include <stdio.h>
#include <math.h>

int main() {
    printf("%d\n", (int)floor(1.5));
    return 0;
}

そのままgccでコンパイルしようとするとエラーになる場合がある。

$ gcc test.c
/tmp/ccEnpiJx.o(.text+0x1c): In function `main':
: undefined reference to `floor'
collect2: ld returned 1 exit status


math.hをincludeしているにもかかわらず上のようにundefined referenceと表示される場合、gccがmath libraryにリンクできていないので、gccに-lmをオプションで渡して手動リンクさせる必要がある。

$ gcc -lm test.c
$ ./a.out
1

これでOK。
sin()とかabs()の場合も同様。


ちなみに今回使っていたgccはSuSE Linux 9 SP3のgcc 3.3.3。
他の環境でも同じエラーが起こった場合はこの方法で対処できると思う。