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的更多信息?
答案 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
中)时才解析它。
长话短说,必须将库放置(至少一次)在使用它们的位置的右侧。