Wie kann ich C- oder C++-Code in einer Unix-Konsole oder einem Mac-Terminal kompilieren/ausführen?
Wie kann ich C/C++-Code in einer Unix-Konsole oder einem Mac-Terminal kompilieren und ausführen?
PA
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.cpp
sondernmake 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
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++
anstattgcc
kann erforderlich sein, wenn es verwendet wirdstd::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
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
Viktor Augusto
Zwei Schritte für mich:
Zuerst:
make foo
Dann:
./foo
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
Peter Mortensen
All dies im “Terminal”.
Um den G++-Compiler zu verwenden, müssen Sie Folgendes tun:
-
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.)
-
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 -
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
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.
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