Was ist der Unterschied? kling++ | clang -std=c++11

Lesezeit: 3 Minuten

Benutzeravatar von djwbrown
djwbraun

Ich hatte fälschlicherweise diesen Befehl verwendet, der beim Verknüpfungsschritt fehlschlug:

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

Kann jemand erklären, warum Clang eine C++-Sprachoption bietet und warum es nicht verknüpft werden kann? Warum nicht die Optionen -x c++ oder -std=c++11 dasselbe erreichen wie clang++? Vielen Dank!

  • Was hat es mit den Downvotes auf sich? Ja, ich verstehe, dass clang++ nur ein Link ist, um clang für C++ zu konfigurieren. Das ist nicht meine Frage, bitte schauen Sie noch einmal. Wenn es Also Einfach, bitte antworten Sie nur, anstatt abzustimmen.

    – djwbraun

    18. November 2013 um 12:35 Uhr


  • Diese Frage in ihrer 4. Überarbeitung ist eine vollkommen gültige Frage, bei der ich keinen Grund sehe, für eine Schließung oder Ablehnung zu stimmen. Es ist ein „Warum…?“ Frage, aber ihr Umfang ist klein genug, dass Hoffnung besteht, dass eine allgemein vereinbarte Begründung als Antwort angeboten wird.

    – Pascal Cuoq

    18. November 2013 um 13:00 Uhr

  • Sollte std=c++11 stdlib=libc++ in der Frage sein -std=c++11 -stdlib=libc++?

    – Eric Postpischil

    18. November 2013 um 14:57 Uhr

  • Welche Fehlermeldung erhalten Sie, wenn Sie versuchen, zu verlinken? Verlinken Sie mit dem Befehl in der Frage oder einem anderen Befehl?

    – Eric Postpischil

    18. November 2013 um 14:58 Uhr

  • @EricPostpischil Du hast Recht; das ist, was ich bekomme, wenn ich nicht kopiere/einfüge. Ich habe die Frage ein letztes Mal bearbeitet, um dies widerzuspiegeln.

    – djwbraun

    19. November 2013 um 1:56 Uhr

Technisch keines der genannten Programme clang oder clang++ ist ein Compiler: sie sind beides Fahrer die die Eingabeargumente analysieren und bestimmen, welche Compiler/Assembler/Linker für welche Dateien mit welchen Befehlszeilenargumenten aufgerufen werden sollen. Der einzige Unterschied zwischen den beiden ist das clang linkt nur gegen die C-Standardbibliothek, wenn sie einen Link durchführt, wohingegen clang++ Links gegen die C++- und C-Standardbibliotheken.

Das -x=<language> Option überschreibt die Heuristik der Treiberprogramme zur Bestimmung der Quelldateisprache, sie weist den Treiber an, den Compiler für aufzurufen <language> trotzdem.

Das -std=<dialect> Option wählt aus, welchen Dialekt einer bestimmten Sprache Sie verwenden möchten. Wenn Sie sicherstellen müssen, dass Ihr C++-Programm auf einen alten C++98-Compiler portierbar ist, können Sie es mit kompilieren -std=c++98. -std gilt nur für die Zielsprache: Es wird nicht versucht, zB Assembler oder Java als C++98 zu kompilieren, sondern nur Quelldateien, die der Treiber für C++ hält.

Kurz gesagt, es gibt zwei verschiedene Treiberprogramme, um die Auswahl der zu verknüpfenden Bibliotheken zu vereinfachen. Es gibt vernünftige Anwendungsfälle für das Kompilieren von C++, aber nicht für das Linken mit der C++-Standardbibliothek.

  • Es ist ähnlich wie gcc vs g++, nicht wahr?

    – LIU Qingyuan

    17. Dezember 2020 um 9:15 Uhr

Clang ist der Name des gesamten Compilers.

Aus Sicht der Befehlszeile gilt jedoch:

  • Clang ist der C-Compiler
  • Clang++ ist der C++-Compiler (wie g++ ein C++-Compiler ist, während gcc ein C-Compiler ist)

Die Option -std=c++11 aktiviert den neuen C++11-Standard (wie in g++).

  • Aber warum ein C++-Optionsflag mit dem C-Compiler anbieten? Das ist meine Hauptfrage.

    – djwbraun

    18. November 2013 um 12:06 Uhr

  • Mit dem Weg kompatibel bleiben gcc macht Sachen.

    – mah

    18. November 2013 um 12:10 Uhr

  • @djwbrown: clang wird wahrscheinlich herausfinden, wann es auf C++-Code ausgeführt wird, und erfolgreich eine Objektdatei erzeugen. Der Unterschied zwischen clang und clang++ wird angezeigt, wenn versucht wird, Ihre Objektdateien zu verknüpfen, bei denen C++ einen anderen Satz als C erfordert. clang wird versuchen, C zu verknüpfen, und clang++ C++-Code.

    – Benjamin Bannier

    18. November 2013 um 12:13 Uhr

  • @BenjaminBannier das hilft, aber warum sollten Sie sich die Mühe machen, Ihnen die Flags -x oder -std= zu geben, wenn sie den Linker nicht auch in die richtige Sprache ändern?

    – djwbraun

    18. November 2013 um 12:32 Uhr

1409860cookie-checkWas ist der Unterschied? kling++ | clang -std=c++11

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy