Programm kompilliert, lässt sich aber nicht ausführen
-
Hii, ich bin noch neu beim Programmieren mit cpp und versuche mich gerade an ein paar leichten Übungen. Meine Programme kompillieren alle, lassen sich mit "./main" (main ist der Name der Funktion) aber leider nicht ausführen. Habe ich bei der Installation von cpp einen Fehler gemacht? Meine Fehlermeldung gibt nur aus, dass der Befehl" ." unbekannt ist. Nutze cpp zur Zeit auf Windows möchte aber bald auf ein WSS wechseln. Hoffe jemand kann mir helfen:
Danke schonmal
-
Du mußt den Namen des kompilierten Programms angeben (die Hauptfunktion bei C und C++ heißt immer
main
).
-
@Annika sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Meine Programme kompillieren alle, lassen sich mit "./main" (main ist der Name der Funktion) aber leider nicht ausführen.
Zum Starten musst du den Namen/Pfad der
.exe
Datei verwenden. Und wie die heisst hat nichts mit Funktionsnamen im Code zu tun. Das legt man beim Kompilieren fest (bzw. genaugenommen beim Linken). Ohne zu wissen wie du Kompilierst/Linkst, kann man die Frage also schwer beantworten.Du könntest aber mal versuchen in dem Verzeichnis wo dein Projekt sich befindet alle
.exe
Files aufzulisten. z.B. mitdir *.exe /s
.
-
@Annika Der Compiler (bzw. der Linker) teilt schon mit, wo das Programm erstellt wurde.
-
@Annika sagte in Programm kompilliert, lässt sich aber nicht ausführen:
lassen sich mit "./main" (main ist der Name der Funktion) aber leider nicht ausführen. (...) Meine Fehlermeldung gibt nur aus, dass der Befehl" ." unbekannt ist. Nutze cpp zur Zeit auf Windows
Der Forwärts-Slash
/
ist der Pfadtrenner unter Linux, unter Windows wird dagegen der Backslash\
verwendet und der Forwärtsslash wird für Parameter benutzt. Beim Compilieren kannst du einen Ausgabenamen angeben, bei gcc/clang geht das mit dem Parameter-o
. Wenn du den nicht angibst, heißt dein Programma.out
unter Linux unda.exe
unter Windows. Unter MSVC kannst du die /Fe-Option benutzen.
-
Windows unterstützt beides, sowohl Forwärts- als auch Backwärtsslash.
-
-
@DocShoe sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Windows unterstützt beides, sowohl Forwärts- als auch Backwärtsslash.
Nein.
Der Forwärsslash kann nicht verwendet werden. Du kannst sogar auf Kommandozeile
a.exe/b.exe
schreiben und Windows führt danna.exe
mit dem Parameter/b.exe
aus, nicht aber die Dateib.exe
im Verzeichnisa.exe
.Mag jetzt an dem
cmd
liegen - und ich weiß nicht, ob das in Windows 11 immer noch so ist, aber so war das jedenfalls früher immer. Etwas anderes ist das, wenn man direkt Funktionen der WinAPI benutzt. Dann mag das gehen. Aber auf cmd-Kommandozeile nicht. (keine Ahnung, wie das in Powershell ist)
-
@wob
Es gibt leider einige compatibility-Hacks die immer noch drinnen sind, die dazu führen dass/
bei manchen Sachen nicht funktioniert. Deina.exe/b.exe
Beispiel geht z.B. wenn du den Pfad in"
setzt.Was ich auch schon beobachtet habe ist dass manche Sachen mit "gemischten" Pfaden nicht klarkommen. Also dass sowas wie
C:\Foo/bar\baz.exe
nicht geht,C:/Foo/bar/baz.exe
aber schon. IIRC war das Explorer. Bei API Calls oder Batch-Files ist mir sowas aber noch nicht aufgefallen.Aber auf cmd-Kommandozeile nicht.
Doch, geht. Man muss halt konsequent
""
verwenden. Was man aber sowieso sollte, wenn man Pfade mit Leerzeichen unterstützen will.
-
@hustbaer sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Doch, geht.
Ok, geht nicht in allen Fällen. Und offenbar hat @Annika doch hier in der Kommandozeile
./main
eingegeben, was eben genau nicht funktioniert, um eine Dateimain
im aktuellen Verzeichnis auszuführen. Daher meine Widerrede.Man muss halt konsequent "" verwenden. Was man aber sowieso sollte, wenn man Pfade mit Leerzeichen unterstützen will.
Ernsthaft? Wenn ich mein Porgramm im aktuellen Verzeichnis auf Kommandozeile aufrufe, von dem ich weiß, dass es kein Leerzeichen enthält, nutze ich NIE Quotes. Und ich bezweifle, dass du das tust. Von daher sehe ich hier den Zusammenhang nicht. Oder schreibst du wirklich
".\programm.exe"
in der Kommandozeile stattprogramm
? (ok, da man tab drückt, kommt das .exe automatisch - und die Quotes auch, wenn nötig)
-
@hustbaer sagte in Programm kompilliert, lässt sich aber nicht ausführen:
@DocShoe sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Backwärtsslash
Noch schlimmer ist aber
@wob und @DocShoe sagten in Programm kompilliert, lässt sich aber nicht ausführen:
Forwärts-Slash
-
Ach komm, das ist doch lustig. Forwärtssläsh.
-
@DocShoe sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Ach komm, das ist doch lustig. Forwärtssläsh.
-
@wob sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Man muss halt konsequent "" verwenden. Was man aber sowieso sollte, wenn man Pfade mit Leerzeichen unterstützen will.
Ernsthaft? Wenn ich mein Porgramm im aktuellen Verzeichnis auf Kommandozeile aufrufe, von dem ich weiß, dass es kein Leerzeichen enthält, nutze ich NIE Quotes. Und ich bezweifle, dass du das tust. Von daher sehe ich hier den Zusammenhang nicht. Oder schreibst du wirklich
".\programm.exe"
in der Kommandozeile stattprogramm
? (ok, da man tab drückt, kommt das .exe automatisch - und die Quotes auch, wenn nötig)Ich hatte da eher an Batch-Files gedacht. Und Pfade die man über Environment-Variablen bekommt. Solche Dinge.
Von daher sehe ich hier den Zusammenhang nicht.
Zusammenhang mit der Frage der OP besteht keiner, das stimmt. Aber Zusammenhang mit deiner Aussage die ich zitiert habe schon. Weil es halt schon mit
cmd.exe
geht, wenn man es denn richtig macht. Und das ist nicht unwichtig, wenn man mit Dingen interagieren muss die aus der POSIX Welt stammen.
-
@Quiche-Lorraine sagte in Programm kompilliert, lässt sich aber nicht ausführen:
@DocShoe sagte in Programm kompilliert, lässt sich aber nicht ausführen:
Ach komm, das ist doch lustig. Forwärtssläsh.
Mein Highlight des heutigen Tages ist die Diskussion was nun lustiger ist - Forwärtssläsh oder Backwärtsslash
-
-
-
@DocShoe
"Ich mag meine Familie kochen und meine Katze."
"Komm wir essen Opa."Satzzeichen können Leben retten!