使用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);
我得到一个
未定义的引用'战俘”
我在做什么错?
当它工作,这是因为计算是由编译器本身进行(且包含在二进制,如果你写出来)
printf("8\n");
当它不工作,是因为pow
功能包含在数学库中,默认情况下,数学库没有与二进制文件链接。
为了让数学库链接,如果你的编译器是gcc,使用
gcc ... -lm ...
和其它编译器,应该是相同的:)
但阅读文档
undefined reference to 'pow'
听起来像一个链接错误。即使您通过包含<math.h>
来引入功能pow
,您也不会链接到数学库中。
使用gcc,使用-lm
命令行参数链接到数学库中。
-1:相同的答案 – karthik 2011-04-27 03:50:09
如果您注意到,相同的答案发布时间间隔 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
工作示例+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
我知道这是旧的,但只是提及,这是不正确的,pow()需要两个双重的参数。 ;) – Pascal 2012-04-12 16:18:28
一个完整的代码片断将是有益的... – 2010-11-13 18:37:36
你包括文件math.h与否? – 2010-11-13 18:37:41
我包括math.h,是的。第一个代码段工作并输出预期的结果。另外两个给出“未定义的参考'pow'”。 – 2010-11-13 18:38:27