main.c :(。text + 0x324):未定义引用`sqrt'

时间:2014-10-13 13:23:10

标签: c

当我尝试在gcc中编译我的程序时,有人能告诉我为什么会出现此错误。我已经包含了数学库。我收录了-lm。我的编译器有问题吗?

$ gcc -lm -Wall *.c
main.c: In function ‘main’:
/tmp/ccqqxFDD.o: In function `main':
main.c:(.text+0x324): undefined reference to `sqrt'
collect2: ld returned 1 exit status

在这里。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{   
    int x1 = 5;
    int x2 = 7;
    int y1 = 11;
    int y2 = 8;    
    double distance = 0; 
    distance=sqrt((pow((x2- x1), 2))+(pow((y2 - y1), 2)));
    printf(" distance is: %lf \n", distance);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

  

我的编译器有问题吗?

没有

  

我已加入-lm

这还不够,还需要尊重选项顺序:

$ gcc -Wall *.c -lm

根据 man gсс

  

...
  您可以混合选项和其他参数。在大多数情况下,您使用的订单无关紧要。订单在您使用时很重要   几种相同的选择;例如,如果指定-L more   不止一次,按指定的顺序搜索目录。 此外,-l选项的位置非常重要。
  ...
  -llibrary
  ...
  它在您编写此选项的命令中有所不同;该   链接器按顺序搜索和处理库和目标文件   它们是指定的。因此,foo.o -lz bar.o在文件foo.o之后但在bar.o之前搜索库z。如果bar.o引用z中的函数,则可能无法加载这些函数   ...