Ant*_*t's 98 c linker linker-errors libm
我是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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时:
gcc test.c -o test
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
/tmp/cc58XvyX.o: In function `main':
test.c:(.text+0x2f): undefined reference to `sqrt'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是sqrt()不是在math.h头文件中?我cosh和其他三角函数有同样的错误.为什么?
wal*_*lyk 148
构建可执行文件时,必须链接数学库.如何做到这一点因环境而异,但在Linux/Unix中,只需添加-lm命令即可:
gcc test.c -o test -lm
Run Code Online (Sandbox Code Playgroud)
数学库已命名libm.so,-l命令选项采用lib前缀和/ .a或.so后缀.
Abh*_*jit 25
您需要链接到链接-lm器选项
你需要编译为
gcc test.c -o test -lm
Run Code Online (Sandbox Code Playgroud)
gcc(非g ++)历史上不会默认包含链接时的数学函数.它也已经从libc分离到一个单独的库libm上.要使用这些功能,你必须通知链接到包含链接库-l链接选项,后跟库名m这样-lm.
小智 6
添加标题:
#include<math.h>
注意:使用abs(),有时在评估时sqrt()可能会取负值,从而导致域错误。
abs()-提供绝对值;
例如,abs(-3) =3
在编译期间在命令末尾包含 -lm :
gcc <filename.extension> -lm
| 归档时间: |
|
| 查看次数: |
186063 次 |
| 最近记录: |