未定义引用c内置函数'pow'

时间:2012-10-24 16:13:31

标签: c math.h

  

可能重复:
  pow() isn’t defined

void octal2decimal(char *octal, char *decimal) {
int oct = atoi(octal);
int dec = 0;
int p = 0;

while (oct!=0) {

    dec = dec + (oct%10) * pow(8,p++); //since oct is base 8 
    oct/=10;
}
*decimal = (char)dec;
*/
}

对于上面的以下代码我收到此错误我不知道为什么我包含math.h但仍然会收到此错误

/tmp/cck07bLe.o: In function 'octal2decimal':
data-converter.c:(.text+0x35f): undefined reference to 'pow'
collect2: ld returned 1 exit status

这是什么意思?我该如何解决?

2 个答案:

答案 0 :(得分:5)

数学库不是默认包含的标准C库的一部分。 链接数学库:

gcc file.c -o file -lm

答案 1 :(得分:1)

pow在数学库(libm)中定义,默认情况下不会链接。因此,您应该在编译命令中添加-lm以获取数学库。例如,如果您使用gcc

gcc data-converter.c -o data-converter -lm

顺便说一下,pow不是计算2的整数幂的正确方法。你应该使用班次:

dec += (oct%10) << (3*p++);
oct /= 10;

向左移动3*p相当于乘以8 p ,但避免浮点数。