Почему я получаю «неопределенную ссылку на sqrt», хотя я включаю заголовок math.h?

Я очень новичок в C, и у меня есть этот код:

#include  #include  int main(void) { double x = 0.5; double result = sqrt(x); printf("The square root of %lf is %lf\n", x, result); return 0; } 

Но когда я скомпилирую это с помощью:

 gcc test.c -o test 

Я получаю сообщение об ошибке:

 /tmp/cc58XvyX.o: In function `main': test.c:(.text+0x2f): undefined reference to `sqrt' collect2: ld returned 1 exit status 

Почему это происходит? Является ли sqrt() не в файле заголовка math.h ? Я получаю ту же ошибку с cosh и другими тригонометрическими функциями. Зачем?

Математическая библиотека должна быть связана при создании исполняемого файла. Как это сделать, зависит от среды, но в Linux / Unix просто добавьте -lm в команду:

 gcc test.c -o test -lm 

Математическая библиотека называется libm.so , а опция -l использует префикс lib и .a или .so .

Вам нужно связать с опцией -lm linker

Вам необходимо скомпилировать

 gcc test.c -o test -lm 

gcc (Not g ++) исторически не будет по умолчанию включать математические функции при связывании. Он также был отделен от libc на отдельной библиотеке libm. Чтобы связать эти функции, вы должны посоветовать компоновщику включить библиотеку -l компоновщик, а затем имя библиотеки m таким образом, -lm .

Вероятно, это ошибка компоновщика. Добавьте ключ -lm чтобы указать, что вы хотите связать со стандартной библиотекой C math ( libm ), которая имеет определение для этих функций (заголовок имеет только декларацию для них – стоит посмотреть на разницу).

Потому что вы не сказали компоновщику о местонахождении математической библиотеки. Компилировать с помощью gcc test.c -o test -lm

Вы должны связать файл заголовка math.h с кодом. Вы можете сделать это, набрав -lm после вашей команды.

Добавить заголовок:

#include

Примечание: используйте abs (), иногда во время оценки sqrt () может принимать отрицательные значения, которые оставляют до ошибки домена.

abs () – обеспечивает абсолютные значения;

пример, abs (-3) = 3

Включить -lm в конце вашей команды во время компиляции:

gcc -lm

Давайте будем гением компьютера.