2016-04-27 4 views
1

Я создаю определенную пользователем функцию внутри своей программы, и когда я пытаюсь использовать pow, компилятор дает мне ошибку и говорит, что есть undefined reference to pow(). Я видел подобные проблемы, и решение было добавить -lm при компиляции. Я сделал это, и все же у него все еще есть проблема. Это произошло только в моих пользовательских функциях, потому что они работали до того, как я просто положил pow в функцию main моего кода. Он также работает, если показатель составляет 2 вместо 0.5. Спасибо, что помогли.Когда я пытаюсь скомпилировать свой код, я получаю сообщение об ошибке «undefined reference to pow()» даже при связывании с '-lm'

#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 */ 
+5

Как вы строите свою программу? Из командной строки? Где в командной строке вы положили '-lm'? Поскольку вопрос заказа, библиотеки должны быть после исходных/объектных файлов. –

+2

Показать (отдельные) команды (ы), которые вы используете для компиляции и ссылки. Еще лучше, сделайте полномасштабный автономный пример, который показывает эту проблему. – Evert

+2

@Steven Carlisle, который вы компилятор? – shafeeq

ответ

0

Поскольку вы используете float вместо double, вы должны использовать powf.

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

Скомпилировать с -lm.

+0

, поэтому я попытался изменить его на powf, а затем он просто сказал, что у него есть неопределенная ссылка на powf –

+0

@StevenCarlisle вы скомпилировали с '-lm'? –

+0

big_statistics_funtion: big_statistics_function.c gcc -o big_statistics_funtion big_statistics_function.c -lm У меня есть -lm. Я не знаю, понимает ли это то, что вы имеете в виду или нет, но это то, что мы делали в классе каждый раз без проблем. –

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 только на заключительном этапе связующей генерации исполняемого файла.