118

可能重复:
在 C 中使用 pow() 的问题
是“未定义的对‘pow’的引用”

我对一个简单的大学课程作业有点问题,这让我很困惑。

本质上,我必须编写一个程序,除其他外,根据给定半径计算球体的体积。我以为我会使用该pow()函数而不是简单地使用r*r*r, 以获得额外的布朗尼积分,但编译器不断给我以下错误:

未定义对“pow”collect2 的引用:错误:ld 返回 1 个退出状态

我的代码如下所示:

#include <math.h>

#define PI 3.14159265 //defines the value of PI

/* Declare the functions */
double volumeFromRadius(double radius);

/* Calculate the volume of a sphere from a given radius */
double volumeFromRadius(double radius) {
    return (4.0/3.0) * PI * pow(radius,3.0f);
}

我正在用命令编译gcc -o sphere sphere.c

这在 uni 的 Windows 机器上的 code::blocks 中编译并运行良好,但在我家里的 Fedora 17 上,命令行编译器拒绝运行。任何想法将不胜感激!

祝福,伊恩

4

1 回答 1

248

您需要与数学库链接:

gcc -o sphere sphere.c -lm

您看到的错误:error: ld returned 1 exit status来自链接器ld(组合目标文件的 gcc 的一部分),因为它无法找到函数pow的定义位置。

包括math.h引入各种函数的声明而不是它们的定义。def 存在于数学库libm.a中。您需要将您的程序与此库链接,以便解决对 pow() 等函数的调用。

于 2012-10-10T16:30:06.850 回答