为什么下面的代码在C中有效:
int res = pow(2, 3);
printf("%d\n", res);
Run Code Online (Sandbox Code Playgroud)
而这另一个不?
int a = 2;
int b = 3;
int res = pow(a, b);
printf("%d\n", res);
Run Code Online (Sandbox Code Playgroud)
即使我试试
double a = 2;
double b = 3;
double res = pow(a, b);
printf("%f\n", res);
Run Code Online (Sandbox Code Playgroud)
我得到了
未明确引用`pow'
我究竟做错了什么?
pmg*_*pmg 54
当它工作时,这是因为计算是由编译器本身完成的(并且包含在二进制文件中,就像你写出来一样)
printf("8\n");
Run Code Online (Sandbox Code Playgroud)
当它不起作用时,是因为该pow函数包含在数学库中,并且数学库默认情况下不与您的二进制文件链接.
要使数学库链接,如果您的编译器是gcc,请使用
gcc ... -lm ...
Run Code Online (Sandbox Code Playgroud)
与其他编译器,应该是相同的:)
但阅读文档
eq-*_*eq- 17
undefined reference to 'pow'听起来像链接器错误.您没有在数学库中链接,即使您pow通过包含引入该功能<math.h>.
使用gcc,使用-lm命令行参数链接到数学库中.