例えばこんな感じで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。
他の環境でも同じエラーが起こった場合はこの方法で対処できると思う。