Ich habe Schwierigkeiten damit, Ubuntus gcc dazu zu bringen, die long double
-manipulierenden Funktionen aus math.h zu verstehen, nämlich sqrtl
, cabsl
und cexpl
. Die Meldung, die ich beim Kompilieren für alle von ihnen bekomme, ist
undefined reference to `sqrtl'
Gibt es noch ein anderes Flag, -lm
das ich in die Befehlszeile einfügen muss, damit gcc diese Funktionen versteht? Fehlt ein Paket? Oder ist das ein Problem mit der Version, die ich verwende (4.6.1 auf Oneiric)?
Antwort1
Das Problem liegt in der Reihenfolge, in der die Argumente an den Compiler übergeben werden.
Auf Oneiric müssen die verknüpften Bibliotheken aufgerufen werdennachder Name der Quelldatei:
gcc test.c -lm
Diese Änderung und die Gründe dafür werden im Folgenden näher beschrieben.Hier.
Bei Funktionen mit konstanten Werten tritt das Problem nicht auf, da gcc integrierte Versionen davon hat. Daher -fno-builtin
führt das Kompilieren mit zum gleichen Fehler wie mit einer Variablen im Argument.
Danke fürJason Contifür diese Informationen.