尽管包括math.h,但在C中对pow()的未定义引用

时间:2012-10-10 16:29:23

标签: c

  

可能重复:
  Problem using pow() in C
  what is 'undefined reference to `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上,命令行编译器拒绝运行。任何想法都将不胜感激!

祝福, 伊恩

1 个答案:

答案 0 :(得分:127)

您需要链接数学库:

gcc -o sphere sphere.c -lm

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

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