可能重复:
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
这是什么意思?我该如何解决?
答案 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 ,但避免浮点数。