Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc在使用fmod()时出错_C_Gcc_Ld_Modulo_Libm - Fatal编程技术网

gcc在使用fmod()时出错

gcc在使用fmod()时出错,c,gcc,ld,modulo,libm,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; } 我明白了 /tmp/ccztJO01.o:在函数“main”中: main.c:(.text+0x4d):对

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;    
}
我明白了

/tmp/ccztJO01.o:在函数“main”中:

main.c:(.text+0x4d):对“fmod”的未定义引用

collect2:ld返回了1个退出状态

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

$ gcc -lm main.c -o main

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

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

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


[更多]更多信息:.

当我输入
gcc-lm main.c-o main时,仍然会收到链接器错误。我需要编写gcc main.c-lm-o main
。如果这对你有好处,那就有点奇怪了。我知道链接器会找到main.c中声明的符号(即
double fmod(double,double)
),但只有在以后找到它的定义(即
libm.a
)时才能解析它


长话短说,库必须(至少一次)“放在”使用它们的地方的右边。

早在2010年,当有人问到这个问题时,大多数linux发行版配置GCC链接共享库,无论它们出现在链接序列中引用之前还是之后。有些人仍然这样做。很有趣。我添加了一个答案,因为我认为它可能对其他人研究这个错误有用。
$ gcc -lm main.c -o main