Почему я получаю ошибки ссылок При вызове функции в Math.h?

StackOverflow https://stackoverflow.com/questions/103407

  •  01-07-2019
  •  | 
  •  

Вопрос

При попытке вызвать функции в math.h, я получаю ошибки ссылок, подобные следующим

undefined reference to sqrt

Но я делаю это #include <math.h>
Я использую gcc и компилирую следующим образом:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

Почему компоновщик не может найти определение для sqrt?

Это было полезно?

Решение

Добавьте -lm в команду при вызове gcc:
gcc -Стена -D_GNU_SOURCE бла -бла -бла -бла

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

Как указала freeMemory, библиотека называется libm.a .В Unix-подобных системах правилом для именования библиотек является lib[blah].a .Затем, если вы хотите связать их со своим исполняемым файлом, вы используете -l[blah] .

Другие советы

Вам нужно явно связать математическую библиотеку.Добавить -lm к флагам, которые вы передаете в gcc, чтобы компоновщик знал, что нужно связать libm.a

Добавить -lm до конца команды gcc для привязки математической библиотеки:

gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

Для правильного связывания объектов важен порядок следования флагов компилятора!В частности, -lm должны быть размещены в конце строки.

Если вам интересно, почему math.h библиотека вообще должна быть включена при компиляции на C, ознакомьтесь с этим объяснением здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top