8

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.c:(.text+0x4d): 未定义对“fmod”的引用

collect2: ld 返回 1 个退出状态

然后我在谷歌上找到了这个:

$ gcc -lm main.c -o main

我为什么要使用-lm,它到底是什么?从哪里可以得到更多关于 gcc 的详细信息?

4

3 回答 3

10

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

于 2010-07-09T04:01:03.797 回答
4

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

[更多] 更多信息:GCC,GNU 编译器集合

于 2010-07-09T04:22:03.037 回答
4

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

长话短说,图书馆必须(至少一次)放置在使用它们的地方的“右侧”。

于 2018-12-23T10:54:56.677 回答