我在使用C中的sqrt函数时遇到了问题,即使我使用的是math.h头并且使用的是doubles尝试运行以下代码时:

#include <stdio.h>
#include <math.h>
int main(int argc, char **argv)
{
int J = 1000000;
sieve(J);
}


int sieve(int J)
{
int P[J+1]; P[0] = 0; P[1] = 0; int i;

for (i = 2; i <= J; i++)    //set all values of P to 1 initially
    {   P[i] = 1;}

int p = 2;

double y = (double) J;
double J2 = sqrt(y);
}

我收到错误:
/tmp/ccAhS08O.o: In function 'sieve':
test.c:(.text+0xf8): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

最佳答案

对于所有最新版本的GCC,在编译时必须显式链接到数学库,因为它不会与标准C库的其余部分一起自动链接)。
如果使用gcc或g++命令在命令行上进行编译,则可以在命令的末尾加上-lm来完成此操作。
例如:gcc-o foo foo.c-lm
或者您可以在Makefile中添加标志,您将使用

07-24 09:44
查看更多