Вы можете обнаружить, что вам нужно связываться с математическими библиотеками в любой системе, которую вы используете, например:
gcc -o myprog myprog.c -L/path/to/libs -lm
^^^ - this bit here.
Включение заголовков позволяет компилятору знать о объявлениях функций, но это делает не обязательно автоматически ссылается на код, необходимый для выполнения этой функции.
В противном случае вам нужно будет показать нам свой код, команду компиляции и платформу, на которой вы работаете (операционная система,компилятор и т. д.).
Следующий код прекрасно компилируется и связывается:
#include <math.h>
int main (void) {
int max = sqrt (9);
return 0;
}
Просто имейте в виду, что некоторые системы компиляции зависят от порядка, в которомбиблиотеки предоставляются в командной строке.Под этим я имею в виду, что они могут обрабатывать библиотеки последовательно и использовать их только для удовлетворения неразрешенных символов в этой точке последовательности.
Так, например, с учетом команд:
gcc -o plugh plugh.o -lxyzzy
gcc -o plugh -lxyzzy plugh.o
и plugh.o
требует что-то из библиотеки xyzzy
, второе может работать не так, как вы ожидаете.В месте, где вы перечисляете библиотеку, нет неразрешенных символов для удовлетворения.
И когда появляются неразрешенные символы из plugh.o
do , уже слишком поздно.