it-swarm.com.de

Kompilieren von C ++ 11 mit g ++

Ich versuche, meinen C++ - Compiler auf C++ 11 zu aktualisieren. Ich habe ein bisschen gesucht und bin zu dem Schluss gekommen, dass ich das Flag -std=c++0x oder -std=gnu++0x verwenden muss, aber ich weiß nicht viel über Flaggen. Kann mir jemand helfen? (Ich benutze Ubuntu 12.04.)

Hier ist der Fehler, den ich vom Compiler erhalte, wenn ich versuche, eine Bibliothek zu verwenden, die in C++ 11 enthalten ist (d. H. Ein Array):

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}

Diese Datei erfordert Compiler- und Bibliotheksunterstützung für den kommenden ISO C++ - Standard C++ 0x. Diese Unterstützung ist derzeit experimentell und muss mit den Compileroptionen -std = c ++ 0x oder -std = gnu ++ 0x aktiviert werden.

Flags (oder Compileroptionen) sind nichts anderes als normale Befehlszeilenargumente, die an die ausführbare Datei des Compilers übergeben werden.

Angenommen, Sie rufen g ++ über die Befehlszeile (Terminal) auf:

$ g++ -std=c++11 your_file.cpp -o your_program

oder

$ g++ -std=c++0x your_file.cpp -o your_program

wenn das oben nicht funktioniert.

483
Oskar N.

Sie können Ihren g++ mit folgendem Befehl überprüfen:

which g++
g++ --version

auf diese Weise erfahren Sie, auf welchen Kompatibilitätspartner derzeit verwiesen wird.

Führen Sie Folgendes aus, um zu g++ 4.7 zu wechseln (vorausgesetzt, Sie haben es auf Ihrem Computer installiert):

Sudo update-alternatives --config gcc

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-4.6   60        auto mode
  1            /usr/bin/gcc-4.6   60        manual mode
* 2            /usr/bin/gcc-4.7   40        manual mode

Wählen Sie dann 2 als Auswahl aus (Mein Gerät zeigt bereits auf g++ 4.7, also das *).

Sobald Sie den Complier gewechselt haben, führen Sie erneut g++ --version aus, um zu überprüfen, ob die Umschaltung korrekt erfolgt ist.

Jetzt kompilieren Sie Ihr Programm mit

g++ -std=c++11 your_file.cpp -o main
41
Harajyoti Das

Ihr Ubuntu hat definitiv eine ausreichend aktuelle Version von g ++. Das zu verwendende Flag ist -std=c++0x.

13
Michael Slade

Wenn Sie die Compiler-Erweiterungen GNU beibehalten möchten, verwenden Sie -std = gnu ++ 0x anstelle von -std = c ++ 0x. Hier ist ein Zitat aus der Manpage:

Der Compiler kann verschiedene Basisstandards wie c89 oder c ++ 98 und GNU Dialekte dieser Standards wie gnu89 oder gnu ++ 98 akzeptieren. Durch die Angabe eines Basisstandards akzeptiert der Compiler alle Programme, die diesem Standard folgen, und solche, die GNU -Erweiterungen verwenden, die dem nicht widersprechen. Beispiel: -std = c89 deaktiviert bestimmte Funktionen von GCC, die mit ISO C90 nicht kompatibel sind, z. B. die Schlüsselwörter "asm" und "typeof", jedoch keine anderen GNU -Erweiterungen, in denen keine Bedeutung vorliegt ISO C90, z. B. das Weglassen des Mittelbegriffs eines "?:" - Ausdrucks. Wenn Sie dagegen einen GNU -Dialekt eines Standards angeben, werden alle Funktionen aktiviert, die der Compiler unterstützt, auch wenn diese Funktionen die Bedeutung des Basisstandards ändern und einige streng konforme Programme möglicherweise abgelehnt werden. Der spezielle Standard wird von -pedantic verwendet, um zu identifizieren, welche Funktionen GNU Erweiterungen bei dieser Version des Standards sind. Beispiel: -std = gnu89 -pedantic warnt vor // Kommentaren im C++ - Stil, -std = gnu99 -pedantic nicht.

10
user1356386

Sie können sich auf den folgenden Link beziehen, für den Funktionen in einer bestimmten Version des Compilers unterstützt werden. Der Compiler enthält eine umfassende Liste der unterstützten Funktionen. Sieht so aus, als ob GCC dem Standard genau folgt und vor allen anderen Compilern implementiert.

Zu Ihrer Frage können Sie mit kompilieren

  1. g++ -std=c++11 für C++ 11
  2. g++ -std=c++14 für C++ 14
  3. g++ -std=c++17 für C++ 17
  4. g++ -std=c++2a für C++ 20, obwohl noch nicht alle Funktionen von C++ 20 unterstützt werden. Über diesen Link erhalten Sie Informationen zur Funktionsunterstützung in GCC .

Die Liste ändert sich ziemlich schnell. Behalten Sie die Liste im Auge, wenn Sie darauf warten, dass bestimmte Funktionen unterstützt werden.

6
yadhu