linux下编译使用math库的C语言出错的解决方案
在linux下编译C语言中用到math库函数时,会遇到类似下面的错误:func.c:(.text+0x12d):对‘sqrt’未定义的引用collect2: error: ld returned 1 exit status原因:因为linux中, sqrt函数不是默认函数库,需要指定位置,所以, C无法在连接时, 找到相对应的库来连接.解决方法:编译器有一些比较通用的参数,其中的-l用来标识要链接
·
在linux下编译C语言中用到math库函数时,会遇到类似下面的错误:
func.c:(.text+0x12d):对‘sqrt’未定义的引用
collect2: error: ld returned 1 exit status
原因:
因为linux中, sqrt函数不是默认函数库,需要指定位置,
所以, C无法在连接时, 找到相对应的库来连接.
解决方法:
编译器有一些比较通用的参数,其中的-l用来标识要链接的库信息:
-lm 表示需要链接数学库libm.a或libm.so或libm.sl
使用如下编译命令告诉程序数学库的位置即可
gcc filename.c -lm
或
gcc filename.c -lm -L/lib -L/usr/lib
执行的如下代码:
一个一元二次方程组的示例
# include <stdio.h>
# include <math.h>
int main(void)
{
double a, b, c;
double delta;
double x1, x2;
printf("请输入一元二次方程的三个系数:\n");
printf("a = ");
scanf("%lf", &a);
printf("b = ");
scanf("%lf", &b);
printf("c = ");
scanf("%lf", &c);
delta = b * b - 4 * a * c;
if (delta > 0)
{
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("有两个解, x1 = %lf, x2 = %lf\n", x1, x2);
}
else if (0 == delta)
{
x1 = x2 = (-b) / (2 * a);
printf("有一个解, x1 = x2 = %lf\n", x1);
}
else
{
printf("无解!");
}
return 0;
}
执行 gcc -o func func.c -lm 语句编译成功!
运行结果:
更多推荐
已为社区贡献1条内容
所有评论(0)