Frage

Beim Versuch, Funktionen in math.h zu nennen, ich bin immer der Linkfehler wie die folgenden

undefined reference to sqrt

Aber ich mache ein #include <math.h>
Ich bin mit gcc und kompilieren wie folgt:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

Warum kann der Linker die Definition für sqrt finden?

War es hilfreich?

Lösung

Fügen Sie den Befehl -Im, wenn Sie gcc nennen:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -Im

Dies wird zeigen, den Linker mit der Mathematik-Bibliothek zu verknüpfen. Einschließlich math.h wird dem Compiler sagen, dass die mathematischen Funktionen wie sqrt () existieren, aber sie sind in einer separaten Bibliothek definiert, die der Linker mit ausführbaren Datei packen muss.

Als Freememory die Bibliothek darauf hingewiesen wird libm.a genannt. Auf Unix-ähnlichen Systemen ist die Regel-Bibliotheken für die Benennung von lib [bla] .a. Dann, wenn man sie auf die ausführbare Datei verknüpfen möchten verwenden Sie -l [bla].

Andere Tipps

Sie müssen die Mathematik-Bibliothek explizit verknüpfen. In -lm auf die Flags Sie auf gcc vorbei, so dass der Linker weiß libm.a zu verknüpfen

Fügen Sie -lm bis zum Ende des gcc-Befehls der Mathematik-Bibliothek zu verknüpfen:

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

Für die Dinge richtig verknüpft werden, die Reihenfolge der Compiler-Flags zählt! Insbesondere sollte die -lm am Ende der Zeile .

Wenn Sie sich fragen, warum die math.h Bibliothek braucht überhaupt aufgenommen werden, wenn sie in C kompilieren, überprüfen Sie diese Erklärung out hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top