在 C 中使用 sqrt 时出错
Error when using sqrt in C
我在使用 C 中的 sqrt 函数时遇到问题,即使我正在使用 math.h header 并且我正在使用双打。当尝试 运行 以下代码时:
#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
您需要 link 数学库:-lm
cc -o out main.c -lm
对于所有最新版本的 GCC,您必须在编译时显式 link 到数学库,因为它不会自动 link 与标准 C 库的其余部分一起编辑) .
如果您在命令行上使用 gcc 或 g++ 命令进行编译,您可以通过在命令末尾添加 -lm 来完成此操作。
例如:gcc -o foo foo.c -lm
或者你可以在你用来编译的 Makefile 中添加标志
我在使用 C 中的 sqrt 函数时遇到问题,即使我正在使用 math.h header 并且我正在使用双打。当尝试 运行 以下代码时:
#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
您需要 link 数学库:-lm
cc -o out main.c -lm
对于所有最新版本的 GCC,您必须在编译时显式 link 到数学库,因为它不会自动 link 与标准 C 库的其余部分一起编辑) .
如果您在命令行上使用 gcc 或 g++ 命令进行编译,您可以通过在命令末尾添加 -lm 来完成此操作。
例如:gcc -o foo foo.c -lm
或者你可以在你用来编译的 Makefile 中添加标志