当我尝试编译我的代码时,即使用'-lm'链接,我也会收到错误,说'对pow()'的未定义引用

时间:2016-04-27 07:15:47

标签: c linker-errors undefined-reference

我正在我的程序中创建一个用户定义的函数,当我尝试使用pow函数时,编译器给出了一个错误,并说有一个undefined reference to pow()。我已经看到了类似的问题,解决方法是在编译时添加-lm。我已经完成了这个但它仍然有问题。它只发生在我的用户定义的函数上,因为它之前我只是将pow放在我的代码的main函数中。如果指数为2而不是0.5,它也有效。谢谢你的帮助。

 #include<math.h>

 float standard_deviation (float variance) {

       float deviation = 0.0;
       deviation = pow(variance, 0.5);

       return deviation;
 } /* mean */


 float standard_error (float standard_deviation, int number_of_elements) {

     return standard_deviation / pow(number_of_elements, 0.5);

 } /* mean */

2 个答案:

答案 0 :(得分:1)

#include <math.h>
#include <stdio.h>

float standard_deviation (float variance)
{
  float deviation = 0.0;
  deviation = pow(variance, 0.5);
  return deviation;
} /* mean */

float standard_error (float standard_deviation, int number_of_elements)
{
  return standard_deviation / pow(number_of_elements, 0.5);
} /* mean */

int main(int argc, char *argv[])
{
        printf ("%f\n", standard_deviation (1.0));
        return 0;
}

在这样调用时编译没有任何问题:

gcc test10.c -o test10 -lm

如果您首先编译.c到.o文件,则只需在生成可执行文件的最后链接阶段使用-lm。

答案 1 :(得分:0)

由于您使用的是float而不是double,因此您应该使用powf

deviation = powf(variance, 0.5f);
return standard_deviation / powf((float)number_of_elements, 0.5f);

使用-lm进行编译。