即使包含math.h标头,为什么也会出现“对sqrt的未定义引用”错误?

我是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

为什么会这样?是sqrt()不是在math.h头文件?我cosh和其他三角函数遇到相同的错误。为什么?


慕妹3242003
浏览 908回答 3
3回答

拉莫斯之舞

您需要使用链接-lm器选项链接您需要编译为gcc test.c&nbsp; -o test -lm历史上,默认情况下,gcc(非g ++)在链接时不会包含数学函数。它还已从libc分离到单独的库libm中。要使用这些功能,你必须通知链接到包含链接库-l链接选项,后跟库名m这样-lm。
打开App,查看更多内容
随时随地看视频慕课网APP