У меня возникли трудности с тем, чтобы gcc Ubuntu понимал long double
функции манипулирования из math.h, а именно sqrtl
, cabsl
и cexpl
. Сообщение, которое я получаю для всех них при компиляции, следующее:
undefined reference to `sqrtl'
Есть ли какой-либо флаг, кроме того -lm
, который я должен поставить в командной строке, чтобы gcc понял эти функции? Это отсутствующий пакет? Или это проблема с версией, которую я использую (4.6.1 на Oneiric)?
решение1
Проблема заключается в порядке передачи аргументов компилятору.
На Oneiric связанные библиотеки должны называтьсяпослеимя исходного файла:
gcc test.c -lm
Это изменение и его причины описаны более подробноздесь.
Проблема не возникает для функций константных значений, поскольку gcc имеет встроенные версии этих функций. Поэтому компиляция с -fno-builtin
дает ту же ошибку, что и с переменной в аргументе.
СпасибоДжейсон Контиза эту информацию.