我对C语言非常陌生,我有这样的代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
double x = 0.5;
double result = sqrt(x);
printf("The square root of %lf is %lf\n", x, result);
return 0;
}
但当我使用以下命令编译此代码时:
gcc test.c -o test
我得到一个类似下面这样的错误:
/tmp/cc58XvyX.o: In function `main':
test.c:(.text+0x2f): undefined reference to `sqrt'
collect2: ld returned 1 exit status
这一切为什么要发生?math.h
头文件中不包含sqrt()
吗?对于cosh
和其他三角函数,我得到了同样的错误。为什么?
发布于 2012-05-02 14:55:27
在生成可执行文件时,必须链接数学库。具体方法因环境而异,但在Linux/Unix中,只需在命令中添加-lm
即可:
gcc test.c -o test -lm
数学库被命名为libm.so
,-l
命令选项采用lib
前缀和.a
或.so
后缀。
发布于 2012-05-02 14:55:12
您需要使用-lm
链接器选项链接
您需要编译为
gcc test.c -o test -lm
在历史上,默认情况下,gcc (不是g++)在链接时不会包含数学函数。它也已经从libc分离到一个单独的库libm上。要链接这些函数,您必须建议链接器包含库-l
链接器选项,后跟库名m
,即-lm
。
发布于 2017-03-03 13:29:36
添加标题:
#include<math.h>
注意:使用abs(),有时在求值时sqrt()会取负值,这会导致域错误。
abs()-提供绝对值;
例如,abs(-3) =3
在编译时将-lm包含在命令的末尾:
gcc <filename.extension> -lm
https://stackoverflow.com/questions/10409032
复制相似问题