Ich bin gerade von Windows auf Ubuntu 11.10 umgestiegen.
Ich habe den folgenden Code in C mit dem Texteditor geschrieben und ihn als HelloWorld.c in Documents gespeichert.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Und ich habe das Terminal gestartet und die folgenden Befehle eingegeben:
cd Documents
gcc HelloWorld.c
Eine Datei mit dem Namen a.out, die nach einer Suche bei Google die ausführbare Datei ist. Ich habe diesen Befehl eingegeben:
a.out
Aber ich verstehe
a.out: command not found
Welchen Schritt habe ich falsch gemacht?
command-line
gcc
c
yihangho
quelle
quelle
sudo chmod 777 a.out
+x
für Sie eingestellt; Sie müssen nicht aufchmod
die von einem Compiler erstellte ausführbare Datei. Die einzige häufige Situationgcc
, in der es nicht ausführbar ist, besteht darin, dass die Datei in einem Dateisystem erstellt wird, das sie nicht unterstützt oder nicht zulässt (in diesem Fallchmod
würde es auch unmittelbar danach fehlschlagen). Auch777
sollte vermieden werden. Es ist nicht erforderlich, es für alle Benutzer lesbar, beschreibbar und ausführbar zu machen. wenn es waren notwendig zu laufenchmod
, dannchmod +x a.out
würde ausreichen.Antworten:
Da Sie eine ausführbare Datei im aktuellen Arbeitsverzeichnis ausführen, sollten Sie ihr ein Präfix voranstellen
./
. Also für dein Programm laufe es als./a.out
.Erläuterung
Das Terminal sucht nach ausführbaren Dateien in
$PATH
. Dies ist ein Unix variablen Umgebung , dass die Listen Verzeichnisse enthalten Systembinärdateien (wie zum Beispiells
,echo
, odergcc
). Wenn Sie eine ausführbare Datei aufrufen, die sich nicht in einem$PATH
Verzeichnis befindet (z. B.a.out
), müssen Sie den absoluten Pfad im Dateisystem angeben.Im Terminal
.
steht also ein Synonym für das aktuelle Arbeitsverzeichnis./a.out
. Sie könnten genauso gut anrufen/home/yihang/Documents/a.out
.quelle
chmod u+x a.out
dem System auch erlauben, es auszuführen.Wenn Sie Befehle unter Linux ausführen, werden alle in der
PATH
Umgebungsvariablen aufgelisteten Verzeichnisse durchsucht. Wenn der Befehl dort nicht gefunden wird, erhalten Sie die Meldung, die Sie gesehen haben.Normalerweise sieht es so aus:
Das heißt, es wird zuerst in aussehen
/usr/local/bin
. Wenn es es dort nicht findet, schaut es hinein/usr/bin
und so weiter.Tatsächlich ist dies unter DOS / Windows sehr ähnlich: Es gibt eine Variable namens
%PATH%
, die genau dasselbe tut.Der Unterschied besteht darin, dass unter Windows auch das aktuelle Verzeichnis durchsucht wird. Unix hält dies für schlecht, da eine lokale Datei (wie Malware) versehentlich wichtige Systemprogramme außer Kraft setzen kann.
Wenn Sie dies jedoch vorziehen, können Sie Linux auf die gleiche Weise
.
zum Laufen bringen, indem Sie Folgendes zum Pfad hinzufügen :(Das sagt Satz
PATH
auf.:
und die vorhandenen Inhalte$PATH
.)Es sieht ungefähr so aus (es kann auf Ihrem Computer anders sein):
Wenn Sie das nicht möchten, können Sie einfach jedes Programm ausführen, indem Sie das Verzeichnis explizit angeben:
oder
quelle
.
zuPATH
, immer fügen Sie es zuletzt.Im Wesentlichen wird das a.out standardmäßig erstellt, da Sie keinen Namen für die ausführbare Datei angegeben haben. Versuchen Sie dies stattdessen:
Sobald Sie das getan haben, sollten Sie in der Lage sein, es aufzurufen, indem Sie (wie Sunil vorgeschlagen hat) "HelloWorld" mit einem Punkt-Schrägstrich (./) voranstellen:
Hier ist ein Link zu einem Artikel, der ein wenig erklärt, warum das a.out erstellt wird: Schreiben und Kompilieren von C-Programmen unter Linux .
quelle