我对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和其他三角函数,我得到了同样的误差.为什么?

推荐答案

在生成可执行文件时,必须链接数学库.如何执行此操作因环境而异,但在Linux/Unix中,只需在命令中添加-lm即可:

gcc test.c -o test -lm

数学库名为libm.so-l命令选项采用lib前缀和.a.so后缀.

C++相关问答推荐

C如何显示字符串数组中的第一个字母

exit(EXIT_FAILURE):Tcl C API类似功能

C/SDL程序,渲染不使用我的渲染器

为什么可以通过指向常量int的指针间接地改变整数的值?

为什么双重打印与C中的float具有不同的大小时具有相同的值?

不会停在空格或换行符上的错误

如何知道我是否从非阻塞套接字读取所有内容

如何将长字符串转换为较小的缩写,该缩写由第一个字符、最后一个字符和中间的字符数组成?

是什么让numpy.sum比优化的(自动矢量化的)C循环更快?

从uint8_t*转换为char*可接受

将返回的char*设置为S在函数中定义的字符串文字可能会产生什么问题?

如何仅使用软件重新初始化STM32微控制器中的USB枚举?

在C++中允许使用字符作为宏参数

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

不兼容的整数到指针转换传递';char';到类型';常量字符*

计算时出现奇怪的计算错误;N Select K;在C中

在哪里可以找到叮当返回码的含义?

If语句默认为true

程序打印一些随机空行

#define X Defined(Y) 是有效的 C/C++ 宏定义吗?