GCC Fehler beheben C++?
Guten Tag,
ich habe C++ auf Ubuntu Linux programmiert und kompiliert mit GCC bzw. G++. Auf Windows 11 kompiliere ich mit MinGW und als Texteditor benutze ich Visual Studio Code. Ich habe auf Windows ein kleines helloworld.cpp geschrieben, das mir nur in der Konsole "Hello World" ausgibt. Der Code besitzt keine Fehler, aber beim Kompilieren tritt dieses Problem auf:
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot open output file a.exe: Permission denied
collect2.exe: error: ld returned 1 exit status
Mein Kompilierbefehl lautet so: g++ helloworld.cpp und meine TEMP-Umgebungsvariable ist bei C:\temp.
Wenn ich die Kommandozeile als Administrator ausführe, funktioniert das ganze. Aber ich möchte nicht jedes Mal die CMD als Admin ausführen.
Vielen Dank im voraus.
3 Antworten
Das Problem scheint zu sein, dass der Linker sein Outputfile a.exe nicht schreiben kann. Vermutlich ist das current work directory, mit welchem der Linker aufgerufen wird schreibgeschützt für den eingeloggten User. Du müsstest herausfinden, wohin er a.exe schreiben will. Das findest Du vermutlich mit dem Utility "procmon" heraus.
Vermutlich kannst Du das Work-Directory irgendwo im Visual Studio Code einstellen.
Ansonsten würde ich mal explizit den Outputfilepfad mit "-o" angeben.
g++ -o C:\Mein_Verzeichnis\helloworld.exe helloworld.cpp
Ich weiss aber nicht, ob das so mit dem Visual Studio zusammen spielt. Es muss ja nachher die erzeugte exe-Datei finden...
Wenn ich die Kommandozeile als Administrator ausführe, funktioniert das ganze
Gut. Aber dann liegt da eine Datei a.exe, die dem Administrator gehört. Und jetzt kommst Du als normaler Nutzer und willst diese Datei überschreiben. Das geht nicht mal unter Windows! Abhilfe:
- Lösche Windows und installiere MS-DOS. Da geht das :-)
- oder wende Dich an Deinen Administrator. Der soll die Datei löschen und Dir Schreibrechte in diesem Verzeichnis geben.
Kann es sein, dass du dem Compiler den Speicherort der erstellten Executable explizit mitgeben musst und er sie sonst im eigenen Verzeichnis zu erstellen versucht, für das offenbar die höheren Rechte notwendig sind? Möglicherweise interessiert ihn die Variable TEMP dabei nicht.
In welchem Verzeichnis befindest du dich während der Ausführung des Befehls, und wo landet die Datei a.exe bei Nutzung der Adminrechte?
Meine helloworld.cpp liegt im Verzeichnis C:\Users\BENUTZERNAME\Documents\C++\helloworld. Wenn ich die CMD als Admin starte, liegt die a.exe im selben Verzeichnis wie die helloworld.cpp. Wenn man in G++ den Befehl "g++ helloworld.cpp -o helloworld.exe" ausführt, kommt der selbe Fehler.