gcc在使用fmod()时出错

时间:2010-07-09 03:59:04

标签: c gcc ld modulo libm

fmod的示例代码:

#include <stdio.h>    
#include <math.h>

int main(void)   
{    
  double x = 0.14527, y = 3.14159;   
  printf("fmod(x, y) = %.6lf\n", fmod(x, y));    
  return 0;    
}

编译:

$ gcc main.c -o main

我得到了

  

/tmp/ccztJO01.o:在函数`main'中:

     

main.c :(。text + 0x4d):未定义对`fmod'的引用

     

collect2:ld返回1退出状态

然后我在谷歌发现了这个:

$ gcc -lm main.c -o main

我为什么要使用-lm,究竟是什么?从哪里可以获得有关gcc的更多信息?

3 个答案:

答案 0 :(得分:7)

-lm只是告诉它链接libm,其中包含所有浮点数学例程,包括(这里不出意外)fmod

答案 1 :(得分:1)

这不是编译器,而是抱怨的链接器ld。它无法在您的程序中找到例程fmod。您必须告诉它使用libm标志与数学库-l链接。

[更多]更多信息:GCC, the GNU Compiler Collection

答案 2 :(得分:1)

当我输入gcc -lm main.c -o main时,仍然出现链接器错误。我需要写gcc main.c -lm -o main才能正常工作。如果它反过来为您工作,那有点奇怪。我知道链接器会找到在main.c中声明的符号(即double fmod(double,double)),但只有在以后找到其定义(即在libm.a中)时才解析它。

长话短说,必须将库放置(至少一次)在使用它们的位置的右​​侧。