g ++ Kompilierungsoptionen -g Debug und -O Optimierung

8

Ich bin mit g ++ - Compilern nicht besonders vertraut, insbesondere mit den Optionen, z. B. -s, -g und -O.

Erstens, kann ich fragen, wann diese Optionen wirksam werden? Während der Kompilierungs- oder Verbindungsphase? Normalerweise gebe ich alle Optionen in beiden Phasen an.

Zweitens, gibt es die Optionen -g1, -g2, -g3? Ich weiß -g fügt Debugging-Informationen in der ausführbaren Datei hinzu. Wie unterscheiden sich andere?

Drittens, was macht -s? Arbeiten -s, -g und -O3 zusammen? Mein Ziel ist es, die ausführbare Datei 1) schnell laufen zu lassen und 2) möglichst klein zu halten. Was schlägst du vor?

    
jason.Z 12.09.2012, 10:46
quelle

1 Antwort

8

Sie sollten sich nicht auf die Optionen konzentrieren, sondern darauf, was Sie erreichen möchten. Meine allgemeinen Kommentare zu dem, was Sie erreichen möchten:

  • Normalerweise gibt es einen Kompromiss zwischen schnell und klein. -O3 bedeutet schnell. Os bedeutet so schnell wie möglich, ohne die Größe zu erhöhen.
  • Sie können Debug-Informationen (-g) mit Optimierung (-O3) verwenden, aber die Informationen sind manchmal schlecht, da es keine direkte Verbindung zwischen der Quelle und dem resultierenden Code gibt
  • Wenn Sie die Debug-Informationen (-s) von der ausführbaren Datei entfernen, können Sie diese ausführbare Datei nicht leicht debuggen (Sie können die Debug-Informationen separat speichern, aber dies ist eine andere Geschichte)

Benutze immer das Handbuch (Zugriff durch Eingabe einer Shell "man g ++" oder durch Suche im Internet "man g ++") und suche nach den Optionen, wenn du neugierig bist, was es tut. Wenn Sie eine höhere Frage haben, können Sie fragen (zum Beispiel wird der Unterschied zwischen -g1 und -g3 im Handbuch erklärt)

Als Vorschlag: Verwenden Sie -O3. Wenn Sie das Programm ständig entwickeln und GDB als Debugger verwenden, verwenden Sie: -ggdb -g3.

Edit: In Bezug auf wann sie angewendet werden: Normalerweise machst du dir keine Sorgen über Phase es ist, senden Sie einfach die Optionen und die g ++ kümmert sich um sie. Wenn Sie etwas genaueres wollen, dann können Sie mehr überprüfen.

    
vladmihaisima 12.09.2012, 11:01
quelle