Seltsames Verhalten von gcc und math.h? [Duplikat]

8

Ich habe versucht, Code zu erstellen, der mathematische Funktionen verwendet (z. B. pow ).

math.h ist enthalten und das Flag -lm wird während des Builds verwendet.

Wenn die Kompilierung wie folgt aufgerufen wird ( -lm flag am Anfang des Befehls), ist sie fehlgeschlagen und hat gesagt, dass ein nicht definierter Verweis auf pow :

besteht %Vor%

Und wenn das -lm -Flag am Ende des Befehls steht, funktioniert es!

%Vor%

Ist das normal?

    
jtextori 25.01.2012, 08:57
quelle

2 Antworten

18

Ja, das ist normal. Für viele Linker ist die Reihenfolge wichtig, in der Sie die Objektdateien und die Bibliotheken angeben.

Um "Eine Einführung in GCC - für die GNU-Compiler gcc und g ++" zu zitieren >:

  

Das traditionelle Verhalten von Linkern besteht darin, in den in der Befehlszeile angegebenen Bibliotheken nach externen Funktionen von links nach rechts zu suchen. Dies bedeutet, dass eine Bibliothek, die die Definition einer Funktion enthält, nach allen Quelldateien oder Objektdateien angezeigt werden sollte, die sie verwenden. Dies schließt Bibliotheken ein, die mit der Abkürzung -l -Option angegeben wurden, wie im folgenden Befehl gezeigt:

     

$ gcc -Wall calc.c -lm -o calc (correct order)

Dieses Verhalten ist üblich, aber keineswegs universell. Im Zweifelsfall konsultieren Sie am besten das Linker-Handbuch. Auf meinem Ubuntu-System gibt man ld beispielsweise Folgendes an:

%Vor%

Mit anderen Worten verhält sich dieser Linker wie in gcc book beschrieben.

    
NPE 25.01.2012 08:59
quelle
4

Wie in Eine Einführung in GCC - für die GNU-Compiler gcc und g ++

  

Das traditionelle Verhalten von Linkern besteht darin, in den in der Befehlszeile angegebenen Bibliotheken nach externen Funktionen von links nach rechts zu suchen. Dies bedeutet, dass eine Bibliothek, die die Definition einer Funktion enthält, hinter allen Quelldateien oder Objektdateien, die sie verwenden, erscheinen sollte.

Ich denke, Sie sehen das gleiche Verhalten.

Beachten Sie, dass es auch weiter besagt,

  

Die meisten modernen Linker durchsuchen alle Bibliotheken, unabhängig von der Reihenfolge, aber es empfiehlt sich, die Reihenfolge der Bibliotheken von links nach rechts zu befolgen.

    
Alok Save 25.01.2012 09:01
quelle

Tags und Links