当我尝试在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;
}
答案 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中的函数,则可能无法加载这些函数 ...