linux下运行程序出现(.text+0xd): undefined reference to `sqrt' 的错误
在linux下编写如下简单的程序7.c:
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,c,s,area;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%f\tb=%f\tc=%f\n",a,b,c);
printf("area=%f\n",area);
return 0;
}
输入命令:gcc 7.c -o 7报错如下:
7.c:(.text+0x77): undefined reference to `sqrt'
collect2: ld 返回 1
经百度调查,可知道:
gcc 7.c -o 7 -lm
为正确的!原因在于:
math.h 为数学函数库,在linux下,数学函数是位于libm.so库文件中的(这些库文件通常位于/lib目录下)
-lm选项会告诉我们的编译器,我们这个程序中用到的数学函数要在这个库中找
而我们常用的printf函数,则位于libc.so库文件中,他们可用-lc命令,当然不用也不出错,因为它是gcc默认的选项.