使用pow()函数会在C中引发未定义的引用错误

时间:2010-11-13 18:35:16

标签: c math.h

为什么下面的代码在C中起作用:

int res = pow(2, 3);
printf("%d\n", res);

而另一个没有?

int a = 2;
int b = 3;

int res = pow(a, b);
printf("%d\n", res);

即使我尝试

double a = 2;
double b = 3;

double res = pow(a, b);
printf("%f\n", res);

我得到了

  

对'pow'的未定义引用

我做错了什么?

4 个答案:

答案 0 :(得分:54)

当它工作时,这是因为计算是由编译器本身完成的(并且包含在二进制文件中,就像你写出来一样)

printf("8\n");

当它不起作用时,是因为pow函数包含在数学库中,并且默认情况下数学库没有与二进制文件链接。
要使数学库链接,如果编译器是gcc,请使用

gcc ... -lm ...

与其他编译器一样,应该是相同的:) 但请阅读文档

答案 1 :(得分:17)

undefined reference to 'pow'听起来像链接器错误。即使您通过包含pow引入函数<math.h>,也不会在数学库中进行链接。

使用gcc,使用-lm命令行参数链接数学库。

答案 2 :(得分:2)

像这样使用

#include <math.h>
#include <stdio.h>

int main(void)
{
  for(int i = 1; i < 5; i++)
     printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));  
  return 0;
}

输出:

  

pow(3.2,1)= 3.200000

答案 3 :(得分:-5)

  

对'pow'的未定义引用

因为任何数字的幂必须具有整数值作为幂

pow(x,y)
where, x must be real and y must be a whole number