我正在尝试编写一个程序来估算pi。它基本上采用0.00和1.00之间的随机点,并将它们与圆的界限进行比较,圆内点与总点之比应接近pi(非常快速的解释,规范更深入)。
但是,使用gcc编译时出现以下错误:
Undefined first referenced
symbol in file
pow /var/tmp//cc6gSbfE.o
ld: fatal: symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
这是怎么回事?我以前从未见过这个错误,我不知道它为什么会出现。这是我的代码(虽然我没有完全测试它,因为我无法通过错误):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
float x, y;
float coordSquared;
float coordRoot;
float ratio;
int n;
int count;
int i;
printf("Enter number of points: ");
scanf("%d", &n);
srand(time(0));
for (i = 0; i < n; i++) {
x = rand();
y = rand();
coordSquared = pow(x, 2) + pow(y, 2);
coordRoot = pow(coordSquared, 0.5);
if ((x < coordRoot) && (y < coordRoot)) {
count++;
}
}
ratio = count / n;
ratio = ratio * 4;
printf("Pi is approximately %f", ratio);
return 0;
}
答案 0 :(得分:6)
在编译(或链接)期间使用-lm
来包含数学库。
像这样:gcc yourFile.c -o yourfile -lm
答案 1 :(得分:3)
需要与-lm链接。 gcc test.c -o test -lm
答案 2 :(得分:2)
错误由链接器ld
生成。它告诉您无法找到符号pow
(在链接器处理的所有目标文件中未定义)。解决方案是包含库,其中包括pow()
函数的实现,libm(m表示数学)。 [1]将-lm
开关添加到编译器命令行调用(在所有源文件规范之后),例如。
gcc -o a.out source.c -lm
[1]或者,你可以在一个单独的翻译单元或库中拥有自己的pow()
实现,但是你仍然需要告诉编译器/链接器在哪里找到它。