Wie kann ich C/C++-Code in einer Unix-Konsole oder einem Mac-Terminal kompilieren und ausführen?

Lesezeit: 1 Minute

Benutzer-Avatar
PA

Wie kann ich C- oder C++-Code in einer Unix-Konsole oder einem Mac-Terminal kompilieren/ausführen?

  • Zugehörige Fehlermeldungen sind oft “Befehl nicht gefunden”, “a.out: Befehl nicht gefunden”oder “/a.out: Keine solche Datei oder Verzeichnis”

    – Peter Mortensen

    8. Mai um 13:49 Uhr

Benutzer-Avatar
camh

Handelt es sich um ein einfaches Single-Source-Programm,

make foo

wo die Quelldatei ist foo.c, foo.cppusw. brauchen Sie nicht einmal ein Makefile. Make hat genug eingebaute Regeln, um Ihre Quelldatei in eine ausführbare Datei mit demselben Namen ohne die Erweiterung zu bauen.

Das Ausführen der gerade erstellten ausführbaren Datei ist dasselbe wie das Ausführen eines beliebigen Programms – aber Sie müssen meistens den Pfad zur ausführbaren Datei angeben, da die Shell nur sucht, was sich darin befindet $PATH um ausführbare Dateien zu finden, und meistens enthält das nicht das aktuelle Verzeichnis (.).

Also, um die gebaute ausführbare Datei auszuführen foo:

./foo

  • Ich habe nicht bemerkt, dass die eingebauten Regeln an Ziele weitergegeben werden, die beim Aufrufen von make angegeben werden. Heute was neues gelernt =)

    – Branan

    21. Oktober 2008 um 17:04 Uhr

  • “-bash: make: command not found” <-- Sie müssen das Entwicklertool und die zusätzlichen Komponenten heruntergeladen haben.

    – dmgig

    30. April 2014 um 15:20 Uhr

  • Es ist nicht make main.cppsondern make main.

    – Craig McMahon

    5. Januar 2015 um 15:51 Uhr

  • Was macht das ./ in ./foo?

    – Fabian Amran

    9. Juli 2021 um 2:54 Uhr

  • @FabianAmran Es bezieht sich auf das aktuelle Verzeichnis. Die Shell sucht nur in den Verzeichnissen, die in der aufgelistet sind $PATH Umgebungsvariable für auszuführende Programme, es sei denn, beim Ausführen des Programms wird ein Pfad angegeben. . (aktuelles Verzeichnis) ist oft nicht drin $PATH aus Sicherheitsgründen.

    – camh

    9. Juli 2021 um 5:54 Uhr

Benutzer-Avatar
Andrej Neverow

gcc main.cpp -o main.out
./main.out

  • Als Neuling hatte ich so viel Kummer, dass ich das “./” bei der Ausführung nicht eingeschlossen hatte

    – funk meiden

    26. Januar 2011 um 6:00 Uhr


  • Ich habe “gcc main.cpp -o main.out” verwendet und bekomme diesen Fehler, Undefinierte Symbole für Architektur x86_64: “std::__1::locale::use_facet(std::__1::locale::id&) const” , … es stellt sich heraus, dass gcc default-links libc ist. während die Verwendung von g++ mit libstdc++ verknüpft wird. Verwenden Sie daher “g ++ main.cpp -o main.out” möglicherweise besser.

    – Rahel

    28. Juli 2015 um 3:18 Uhr


  • Über Undefined symbols for architecture x86_64 Problem, ich ändere den Befehl wie folgt: gcc -lstdc++ main.cpp -o main.out, und das funktioniert auf meinem Mac. über den Link: stackoverflow.com/questions/11852568/…

    – rotava

    6. März 2018 um 9:08 Uhr

  • g++ anstatt gcc kann erforderlich sein, wenn es verwendet wird std::cout (zB ein Hallo Welt! Programm).

    – Peter Mortensen

    3. April um 13:44 Uhr


  • Wie hier angemerkt.

    – Peter Mortensen

    3. April um 14:02 Uhr

Benutzer-Avatar
Komengem

Dies ist der Befehl, der auf allen Unix-Rechnern funktioniert … Ich verwende ihn unter Linux/Ubuntu, aber er funktioniert auch unter OS X. Geben Sie den folgenden Befehl ein Terminal.app.

g++ -o lab21 iterative.cpp

-o ist der Buchstabe O, nicht Null

lab21 wird Ihre ausführbare Datei sein

iterative.cpp ist Ihre C++-Datei

Nachdem Sie diesen Befehl ausgeführt haben, geben Sie Folgendes in das Terminal ein, um Ihr Programm auszuführen:

./lab21

Benutzer-Avatar
Viktor Augusto

Zwei Schritte für mich:

Zuerst:

make foo

Dann:

./foo

Benutzer-Avatar
orj

Die gesamte Anwendungsausführung in einer Unix-Umgebung (Linux, Mac OS X, AIX usw.) hängt vom Suchpfad der ausführbaren Datei ab.

Sie können diesen Pfad im Terminal mit diesem Befehl anzeigen:

echo $PFAD

Unter Mac OS X wird (standardmäßig) der folgende durch Doppelpunkte getrennte Suchpfad angezeigt:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Daher kann jede ausführbare Datei in den aufgelisteten Verzeichnissen ausgeführt werden, indem Sie einfach ihren Namen eingeben. Zum Beispiel:

cat meinetextdatei.txt

Das läuft /bin/cat und zeigt dem Terminal mytextfile.txt an.

Um einen anderen Befehl auszuführen, der sich nicht im Suchpfad der ausführbaren Datei befindet, müssen Sie den Pfad zur ausführbaren Datei qualifizieren. Angenommen, ich hätte eine ausführbare Datei namens MyProgram in meinem Home-Verzeichnis unter Mac OS XI, kann sie folgendermaßen vollständig qualifizieren:

/Benutzer/oliver/MeinProgramm

Wenn Sie sich an einem Ort befinden, der sich in der Nähe des Programms befindet, das Sie ausführen möchten, können Sie den Namen mit einem Teilpfad qualifizieren. Zum Beispiel, wenn MyProgram stand im Verzeichnis /Users/oliver/MyProject Ich und ich war in meinem Home-Verzeichnis. Ich kann den Namen der ausführbaren Datei wie folgt qualifizieren und ausführen lassen:

MeinProjekt/MeinProgramm

Oder sagen Sie, ich war im Verzeichnis /Users/oliver/MyProject2 und ich wollte ausführen /Users/oliver/MyProject/MyProgram Ich kann einen relativen Pfad wie diesen verwenden, um ihn auszuführen:

../MeinProjekt/MeinProgramm

Ebenso wenn ich im selben Verzeichnis bin wie MyProgram Ich muss einen relativen Pfad “aktuelles Verzeichnis” verwenden. Das aktuelle Verzeichnis, in dem Sie sich befinden, ist das Punktzeichen gefolgt von einem Schrägstrich. Zum Beispiel:

./MeinProgramm

Um festzustellen, in welchem ​​Verzeichnis Sie sich gerade befinden, verwenden Sie die pwd Befehl.

Wenn Sie häufig Programme an einer Stelle auf Ihrer Festplatte ablegen, die Sie ausführen möchten, ohne ihre Namen qualifizieren zu müssen. Wenn Sie beispielsweise in Ihrem Home-Verzeichnis ein “bin”-Verzeichnis für regelmäßig verwendete Shell-Skripte anderer Programme haben, kann es ratsam sein, Ihren ausführbaren Suchpfad zu ändern.

Dies kann einfach durch Erstellen oder Bearbeiten der vorhandenen erfolgen .bash_profile Datei in Ihrem Home-Verzeichnis und fügen Sie die Zeilen hinzu:

#!/bin/sh
export PATH=$PATH:~/bin

Hier wird die Tilde (~) als Abkürzung für /Users/oliver verwendet. Beachten Sie auch, dass die Hash-Bang-Zeile (#!) die erste Zeile der Datei sein muss (falls sie noch nicht existiert). Beachten Sie auch, dass diese Technik erfordert, dass Ihre Login-Shell bash ist (die Standardeinstellung unter Mac OS X und den meisten Linux-Distributionen). Beachten Sie auch, dass, wenn Sie möchten, dass Ihre Programme in installiert werden ~/bin Um sie anstelle von ausführbaren Systemdateien zu verwenden, sollten Sie die export-Anweisung wie folgt neu anordnen:

export PATH=~/bin:$PATH

  • sieht nach einer großartigen Idee aus. EDIT: nvm, ich bin ironisch. Nur das ganze $PATH-Zeug erinnert mich an Windows-“Umgebungsvariablen”, mit denen Sie nicht zu viel herumspielen sollten

    – cmarangu

    29. Januar 2021 um 2:22 Uhr


  • Entwirrt: “Es sieht nach einer großartigen Idee aus. EDIT: Egal – ich war ironisch gemeint. Nur das ganze $PATH-Zeug erinnert mich an Windows “Umgebungsvariablen”, mit denen man nicht zu viel herumspielen sollte.”

    – Peter Mortensen

    19. Februar um 11:27 Uhr

  • macOS hat die Standard-Shell geändert in Z-Schale in macOS v10.15 (Katalina). Funktioniert es dafür?

    – Peter Mortensen

    3. April um 13:47 Uhr


Benutzer-Avatar
Peter Mortensen

All dies im “Terminal”.

Um den G++-Compiler zu verwenden, müssen Sie Folgendes tun:

  1. Navigieren Sie in das Verzeichnis, in dem Sie die *.cpp-Datei gespeichert haben.

    cd ~/programs/myprograms/

    (Das ~ ist eine Abkürzung für Ihr Zuhause, dh /Benutzer/Ryan/Programme/MeineProgramme/, ersetzen Sie es durch den Ort, den Sie tatsächlich verwendet haben.)

  2. Kompilieren Sie es

    g++ input.cpp -o output.bin (Ausgabe.bin kann wirklich alles mit jeder Erweiterung sein. Die Erweiterung .bin ist unter Unix einfach üblich.)

    Es sollte sein nichts zurückgegeben, wenn es erfolgreich war, und das ist in Ordnung. Im Allgemeinen erhalten Sie Renditen bei Fehlern.

    Allerdings, wenn Sie eingeben ls, sehen Sie die Liste der Dateien im selben Verzeichnis. Beispielsweise würden Sie die anderen Ordner sehen, Eingabe.cpp und Ausgabe.bin

  3. Führen Sie es nun aus dem Verzeichnis heraus mit aus ./outbut.bin

  • sieht nach einer großartigen Idee aus. EDIT: nvm, ich bin ironisch. Nur das ganze $PATH-Zeug erinnert mich an Windows-“Umgebungsvariablen”, mit denen Sie nicht zu viel herumspielen sollten

    – cmarangu

    29. Januar 2021 um 2:22 Uhr


  • Entwirrt: “Es sieht nach einer großartigen Idee aus. EDIT: Egal – ich war ironisch gemeint. Nur das ganze $PATH-Zeug erinnert mich an Windows “Umgebungsvariablen”, mit denen man nicht zu viel herumspielen sollte.”

    – Peter Mortensen

    19. Februar um 11:27 Uhr

  • macOS hat die Standard-Shell geändert in Z-Schale in macOS v10.15 (Katalina). Funktioniert es dafür?

    – Peter Mortensen

    3. April um 13:47 Uhr


Benutzer-Avatar
Peter Mortensen

Ein kompakter Weg, dies zu tun, könnte sein:

make foo && ./$_

Es ist schön, einen Einzeiler zu haben, damit Sie Ihre ausführbare Datei einfach erneut ausführen können.

1013030cookie-checkWie kann ich C/C++-Code in einer Unix-Konsole oder einem Mac-Terminal kompilieren und ausführen?

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

Privacy policy