Ошибка компиляции программы на C: неопределенная ссылка - PullRequest
2 голосов
/ 17 июля 2011

Я не могу скомпилировать следующий простой код C и не знаю почему.

#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <math.h>
int main(){
     double result;
     result = cos(0.5);
     printf("asin(0.5) is %f\n", result);
     return 0;
}

Сообщение об ошибке, которое я получаю после попытки компилирования, -

In function 

'main':
test.c:(.text+0xlc): undefined reference to 'cos'
collect2: ld

 returned 1 exit status

Ответы [ 2 ]

14 голосов
/ 17 июля 2011

Вам необходимо связаться с библиотекой математики (-lm).

gcc -Wall -Wextra -o test test.c -lm

См. C FAQ .

0 голосов
/ 18 июля 2011

В общем случае, когда вы получаете неопределенную ошибку ссылки, это связано с тем, что компилятор не может найти определение вашей функции.Так что это может быть ваша функция (и вы неправильно набрали написание функции, чтобы вы получили эту ошибку) или встроенная функция, как вы столкнулись в этом случае.
для изучения различных библиотек и их связывание необходимо во время компиляции

всякий раз, когда вы используете математическую функцию, используйте -lm (l обозначает ссылку, а m обозначает математику)
в pthreadвстроенные функции используют -lpthread
и т. д. В этом случае действительно используйте -lm

gcc -lm test.c

, чтобы скомпилировать вашу программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...