Der Versuch, 'a.out' auszuführen, gibt "-bash: a.out: Befehl nicht gefunden" zurück.

7

Ich habe ein einfaches C-Programm auf einem anderen Linux-Computer geschrieben. Ich würde es mit kompilieren

gcc guess.c

Das würde eine a.outDatei ausgeben . Ich würde dann einfach den Befehl a.outeingeben und mein C-Programm würde ausgeführt.

Ich habe versucht, dasselbe C-Programm auf meinem Pi auszuführen. Es kompiliert gut und gibt eine a.outDatei aus. Wenn ich versuche, den Befehl "a.out" auszuführen, wird eine Fehlermeldung angezeigt:

-bash: a.out: Befehl nicht gefunden.

Weiß jemand, wie man a.outUnterstützung beim Arbeiten am Pi bekommt ?

Morgan Kenyon
quelle
2
Ich würde auch das Flag "-Wall" zu Ihrem gcc-Befehl hinzufügen, um alle Warnmeldungen anzuzeigen.
HectorLector
Dies könnte als PI-bezogen angesehen werden, da das OP bei seinem PI ein anderes Verhalten beobachtet hat als bei früheren Nicht-PI-Erfahrungen. Zugegeben, die Antwort auf die Frage ist eine reine UNIX / Linux-Antwort, aber viele PI-Fragen / Probleme beziehen sich auf UNIX / Linux.
HeatfanJohn
2
"Wenn Sie Fragen zum Raspberry Pi haben oder etwas, das auf dem Raspberry Pi passiert, sind Sie im Grunde am richtigen Ort." Direktes Zitat aus der Hilfe zum Thema.
Morgan Kenyon
2
@ MorganK Es ist fraglich. Wir sind jedoch der Meinung, dass es derzeit eher auf die Verwendung von Bash ausgerichtet ist und daher eine allgemeine Linux-Frage ist, da Ihr Problem auf jedem Linux-System und nicht nur auf dem Raspberry Pi auftritt. Bitte kommen Sie zu Raspberry Pi Chat, wenn Sie weiter diskutieren möchten!
Jivings
@MorganK Ich bin nicht böse, aber was ist der Grund dafür, dass Sie die Antwort akzeptieren, die Sie über meine Antwort gegeben haben? Es ist vollkommen in Ordnung, dass Sie es getan haben. Ich frage mich nur, wie Sie die Antworten in Zukunft verbessern können, damit sie akzeptiert werden.
Syb0rg

Antworten:

15

Sie sollten Folgendes eingeben:

./a.out

Wenn sich Ihre Datei im aktuellen Verzeichnis befindet.

Sie können auch überprüfen, ob das ausführbare Bit mit gesetzt ist

ls -al a.out

und wenn nicht, stellen Sie es mit ein

chmod +x a.out

Die meisten Compiler setzen jedoch automatisch ein ausführbares Bit für Sie.

lenik
quelle
Es ist auch erwähnenswert, dass Sie die Binärdatei nicht ausführen können, wenn die Binärdatei nicht für die bestimmte Plattform (Arm) kompiliert wurde.
Ortang
Der Befehl file meldet die Details einer ausführbaren Datei, einschließlich ARM vs x86.
Chad Farmer
15

Sie müssen ein ./vor a.outsetzen, um dies auszuführen:

Wenn Sie den Namen eines Programms eingeben a.out, sucht das System nach der Datei in Ihrem PATH. Auf meinem System ist PATH auf eingestellt

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Ihre ist wahrscheinlich ähnlich. Geben Sie zur Überprüfung echo $PATHein Terminal ein.

Das System durchsucht diese Verzeichnisse in der angegebenen Reihenfolge. Wenn es das Programm nicht findet, wird ein command not foundFehler ausgegeben .

Wenn Sie den Befehl mit ./effektiv voranstellen, heißt es: "Vergessen Sie den PFAD. Ich möchte, dass Sie nur im aktuellen Verzeichnis suchen."

In ähnlicher Weise können Sie das System anweisen, nur an einer anderen bestimmten Stelle zu suchen, indem Sie dem Befehl einen relativen oder absoluten Pfad voranstellen, z.

./Debug/hello: "Suche helloim Debug-Unterverzeichnis meines aktuellen Verzeichnisses."

oder /bin/ls: " lsim Verzeichnis suchen /bin"

Standardmäßig befindet sich das aktuelle Verzeichnis nicht im Pfad, da dies als Sicherheitsrisiko angesehen wird. Siehe Warum ist. standardmäßig nicht im Pfad? auf Superuser für warum.

Es ist möglich, das aktuelle Verzeichnis zu Ihrem PATH hinzuzufügen, aber aus den in der verknüpften Frage angegebenen Gründen würde ich es nicht empfehlen.

Ich bin mir nicht sicher, warum in der Antwort angegeben wurde, dass Ihr Pfad nicht geändert werden soll, da in der Antwort auf SuperUser angegeben wurde, dass dies eine "sehr lahme und nutzlose Antivirenmaßnahme ist und nichts Sie davon abhält, dem Pfad selbst einen Punkt hinzuzufügen".

syb0rg
quelle