使用POW()函数抛出未定义的引用错误使用C

问题描述:

为什么代码工作在C以下位:使用POW()函数抛出未定义的引用错误使用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); 

我得到一个

未定义的引用'战俘”

我在做什么错?

+0

一个完整的代码片断将是有益的... – 2010-11-13 18:37:36

+0

你包括文件math.h与否? – 2010-11-13 18:37:41

+0

我包括math.h,是的。第一个代码段工作并输出预期的结果。另外两个给出“未定义的参考'pow'”。 – 2010-11-13 18:38:27

当它工作,这是因为计算是由编译器本身进行(且包含在二进制,如果你写出来)

printf("8\n"); 

当它不工作,是因为pow功能包含在数学库中,默认情况下,数学库没有与二进制文件链接。
为了让数学库链接,如果你的编译器是gcc,使用

gcc ... -lm ... 

和其它编译器,应该是相同的:)
但阅读文档

+4

你真的很棒! GCC使用MPFR。以下是一些信息:http://gcc.gnu.org/gcc-4.3/changes.html#mpfropts – swatkat 2010-11-13 18:46:56

+0

MPFR!窝! :)当我尝试完全一样的东西时,完全打倒我,不敢相信我所看到的。 – Deqing 2014-08-26 09:05:31

undefined reference to 'pow'听起来像一个链接错误。即使您通过包含<math.h>来引入功能pow,您也不会链接到数学库中。

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

+0

-1:相同的答案 – karthik 2011-04-27 03:50:09

+11

如果您注意到,相同的答案发布时间间隔 2013-10-03 00:55:20

使用这样

#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

+0

工作示例+1(即使它没有真正回答问题):为什么downvote? (这不是我)---我猜是因为''%lf''是一个无效的转换说明符,但downvoter可能会更有帮助 – pmg 2010-11-13 18:56:51

未定义参考`POW”

因为权力任意数量必须有一个整数值作为动力

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

我知道这是旧的,但只是提及,这是不正确的,pow()需要两个双重的参数。 ;) – Pascal 2012-04-12 16:18:28