Wie kompiliere ich ein C-Programm, das math.h verwendet?

12

Ich habe Probleme in der Header-Datei math.h und wenn ich die Quadratwurzelfunktion wie in verwende sqrt(d). Aber mein Compiler unterstützt dies nicht. Bitte informieren Sie mich über dieses Problem.

Meine Ubuntu-Version ist 2012.

Shreya
quelle
2
Während wir Programmierfragen lieben - die Frage muss sich auf Ubuntu beziehen - können Sie im Detail klären, worum es hier geht - Beispiele usw.?
fossfreedom
es ist wie sqrt ((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)) ... mein compiler unterstützt diesen befehl nicht
shreya
1
Bitte antworten Sie, indem Sie Ihre Frage bearbeiten. Geben Sie Codebeispiele an, wie Sie kompilieren, Version von Ubuntu, Version des Compilers. Haben Sie versucht, dies auf einem anderen Compiler / einer anderen Distribution zu tun? Was passiert etc?
fossfreedom
1
@shreya Fragen zu Problemen mit dem von Ihnen geschriebenen Code müssen das spezifische Problem beschreiben und gültigen Code zur Reproduktion in die Frage selbst aufnehmen. Anleitungen finden Sie unter SSCCE.org .
Braiam
3
Ich denke wirklich nicht, dass dies nicht zum Thema gehört. Auf vielen anderen Betriebssystemen wie Windows ist es nicht erforderlich, eine spezielle Linkeroption zu übergeben, um die Mathematikbibliothek in C-Programmen zu verwenden. Sogar auf einigen Unix-ähnlichen Betriebssystemen erfordert die Standard-C-Bibliotheksimplementierung dies nicht. Dies ist ein Problem, mit dem viele Benutzer konfrontiert sind, wenn sie zu GNU / Linux-Systemen wie Ubuntu wechseln. Ich wünschte, die Frage wäre besser geschrieben, um den spezifischen Fehler einzuschließen - wenn wir dieses Thema in Betracht ziehen, sollten wir es vielleicht bearbeiten -, aber dies ist keine allgemeine C-Programmierfrage, sondern eine Frage zur Verwendung gccunter Ubuntu .
Eliah Kagan

Antworten:

21

Fügen Sie -lman das Ende Ihres gccBefehls an.

Bei allen aktuellen Versionen von GCC auf GNU / Linux-Systemen wie Ubuntu müssen Sie explizit darauf verweisen, wenn Sie die Mathematikbibliothek verwenden. Es wird nicht automatisch mit dem Rest der Standard-C-Bibliothek verknüpft.

Wenn Sie auf der Kommandozeile mit dem kompilieren gccoder g++Befehl, würden Sie dies erreichen , indem setzen -lmam Ende des Befehls .

Zum Beispiel: gcc -o foo foo.c -lm

Eliah Kagan
quelle
2

Wenn Sie ein C-Programm mit der Bibliothek math.h in LINUX unter Verwendung von GCC oder G ++ kompilieren möchten, müssen Sie nach dem Kompilierungsbefehl die Option –lm verwenden .

gcc xyz.c -o xyz -lm

Hier,

gcc ist der Compilerbefehl (Compilername)
xyz.c ist ein Quelldateiname.
-o ist eine Option zum Angeben der Ausgabedatei.
xyz ist der Name der Ausgabedatei.
-lm ist eine Option, um erneut eine Verknüpfung mit der Mathematikbibliothek ( libm ) herzustellen .

Für weitere Informationen hier ist der Link mit dem vollständigen Artikel.
C-Programm mit math.h unter Linux kompilieren.

Mike
quelle
Nach dem Verknüpfungsbefehl nicht der Kompilierungsbefehl. (Entschuldigung für das Nitpicking, aber es richtig zu machen hilft, andere Situationen zu verstehen).
Mousomer