0

可能重复:
未定义 pow()

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

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

4

2 回答 2

5

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

gcc file.c -o file -lm
于 2012-10-24T16:15:33.133 回答
1

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

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

顺便说一句,pow这不是计算二的积分幂的正确方法。您应该改用班次:

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

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

于 2012-10-24T16:14:38.240 回答