gcc erzeugt Datein die ich nicht ausführen kann
gcc erzeugt Datein die ich nicht ausführen kann
Hallo zusammen,
du ich aktuell schulisch C-Programmierung gelernt bekomme möcht ich diese auch auch meinem PC nutzen.
Leider bekomme ich es nicht hin, dass mit dem Befehl
gcc -o <Exec_Dateiname> <C-Quellcodedatei>
eine Datei entsteht die ich ausführen kann.
ls -all zeigt die Datei jedoch und auch im Konqueror sind die Dateien jedoch als ausführbar markiert.
Das Kompilieren selbst hat auch keine Fehler angezeigt (im übrigen handelt es sich aktuell nur um ein Hallo Welt Programm)
Die Version von gcc 3.2.3 (habe ich evtl eine false version, das auf meiner schule ein andere eingetzt wird?!?)
Ach ja auch unter root-Rechten geht es nicht.
Über Hilfe wäre ich glücklich
Gruß choji
du ich aktuell schulisch C-Programmierung gelernt bekomme möcht ich diese auch auch meinem PC nutzen.
Leider bekomme ich es nicht hin, dass mit dem Befehl
gcc -o <Exec_Dateiname> <C-Quellcodedatei>
eine Datei entsteht die ich ausführen kann.
ls -all zeigt die Datei jedoch und auch im Konqueror sind die Dateien jedoch als ausführbar markiert.
Das Kompilieren selbst hat auch keine Fehler angezeigt (im übrigen handelt es sich aktuell nur um ein Hallo Welt Programm)
Die Version von gcc 3.2.3 (habe ich evtl eine false version, das auf meiner schule ein andere eingetzt wird?!?)
Ach ja auch unter root-Rechten geht es nicht.
Über Hilfe wäre ich glücklich
Gruß choji
Rechte / Pfad ?
was bekommst Du denn nach einem ausgegeben?
Hast Du das Recht, die Datei zu starten? Normalerweise erhält die erzeugte Datei direkt die entsprechenden Attribute.
Wo (kompletter Pfad wie z.B. /home/username/meineprogramme/bla/ ) steht die Datei? Evtl. ist dieses Verzeichnis nicht im Pfad enthalten.
Mach doch mal ein Terminal auf und stell Dich in das Verzeichnis, wo die Datei ist.
Danach ein, damit der Kommandointerpreter gezwungen wird, direkt in diesem Verzeichnis zu suchen.
Gruss
Sven
Code: Alles auswählen
ls -la
Hast Du das Recht, die Datei zu starten? Normalerweise erhält die erzeugte Datei direkt die entsprechenden Attribute.
Wo (kompletter Pfad wie z.B. /home/username/meineprogramme/bla/ ) steht die Datei? Evtl. ist dieses Verzeichnis nicht im Pfad enthalten.
Mach doch mal ein Terminal auf und stell Dich in das Verzeichnis, wo die Datei ist.
Danach ein
Code: Alles auswählen
./dateiname
Gruss
Sven
Ok nachdem ich den Komandointerpreter zu dieser Datei gezwungen habe gehts.
Also sprich ich bin in meinem Home-Verzeichnis und die Datei heist execuebung
... damit geht es net,
... und so gehts.
Kann mir jetzt noch jemand erkären warum? Bzw wo man dieses wieder einstellen kann das des auch ohne ./ geht?
Aber auf alle Fälle schon mal rießen Danke euch!
Gruß
choji
Also sprich ich bin in meinem Home-Verzeichnis und die Datei heist execuebung
Code: Alles auswählen
choji@debian:~$ execuebung
Code: Alles auswählen
choji@debian:~$ ./execuebung
Kann mir jetzt noch jemand erkären warum? Bzw wo man dieses wieder einstellen kann das des auch ohne ./ geht?
Aber auf alle Fälle schon mal rießen Danke euch!
Gruß
choji
Das lokale Verzeichniss ist nicht in deiner Pathvariable, was sicherheitstechnisch auch sinnvoll ist. Falls du es jedoch doch möchtest das es ohne ./ geht, müßtest du dein lokales Verzeichniss (also ein . ) zu deiner Pathvariable hinzufügen.choji hat geschrieben: Kann mir jetzt noch jemand erkären warum? Bzw wo man dieses wieder einstellen kann das des auch ohne ./ geht?
cu
Soll des nun heisen, dass egel in welchem Verzeichnis auch immer ich eine solche Datei erstelle, ich immer ./ zum ausführen davor setzen muss, solange dieses Verzeichnis eben noch nicht in der PATH-Variable definiert ist?
Bzw. dann weiter die Frage, wenn ich mein Home-Verzeichnis in die PATH-Variable aufnehme so ist das dann doch nicht rekursiv.
Bzw. dann weiter die Frage, wenn ich mein Home-Verzeichnis in die PATH-Variable aufnehme so ist das dann doch nicht rekursiv.
Hi suntsu,
ich hab folgende Zeilen in meinet ~/.basrc hinzugefügt:
So kann ich eigene Programme nach ~/bin legen, und die werden bei Namensgleichheit vorrangig ausgeführt und das aktuelle Verzeichnis wird auch durchsucht, wenn der Befehl nicht schon vorher in einem der Pfade gefunden wurde.
Gruß
Dookie
ich hab folgende Zeilen in meinet ~/.basrc hinzugefügt:
Code: Alles auswählen
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}":./
fi
Gruß
Dookie
So nun mal ob ich das noch richtig verstehe:
Das mit dem ./ als Prefix zum ausführen von ExecuteDateien im aktuellen Verzeichnis ist zur Sicherheit so bei Linux. "Und sollte als auch so bleiben"
Also wenn genau dieses "einfache" ausführen der erstellten Dateien in der Schule bei mir funktioniert heist dies, das dies dort eingestellt worden ist?!?
Noch eine Anmerkung, warum lässt sich eigentlich das Programm nicht mal vom Konqueror in X starten? Ist das der selbe Grund? Bzw ist auch dieses mit einem Sinn verbunden?
Danke schon mal für klärende Antworten
Gruß choji
Das mit dem ./ als Prefix zum ausführen von ExecuteDateien im aktuellen Verzeichnis ist zur Sicherheit so bei Linux. "Und sollte als auch so bleiben"
Also wenn genau dieses "einfache" ausführen der erstellten Dateien in der Schule bei mir funktioniert heist dies, das dies dort eingestellt worden ist?!?
Noch eine Anmerkung, warum lässt sich eigentlich das Programm nicht mal vom Konqueror in X starten? Ist das der selbe Grund? Bzw ist auch dieses mit einem Sinn verbunden?
Danke schon mal für klärende Antworten
Gruß choji
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Der Sinn ist folgender:
Du bist z.B. als root im Verzeichnis "/usr". Ich habe als böser User es irgendwie geschafft, dort eine ausfürbare Datei namens "ls" hinzulegen, die mir einen root Zugang verschafft, wenn root sie ausführt. Wenn root jetzt das aktuelle Verzeichnis in seinem Pfad hätte, und ein "ls" machen würde, würde er mein Prgramm ausführen, statt dem richtigen ls.
Deshalb ist "." nicht per Default im Pfad. Wenn Du das änderst, solltest Du Dir nur darüber im Klaren sein. Auf einer single User Maschione zu Hause ist das mit Sicherheit wesentlich harmloser, als auf einem öffentlichen Pool Rechner.
Patrick
Du bist z.B. als root im Verzeichnis "/usr". Ich habe als böser User es irgendwie geschafft, dort eine ausfürbare Datei namens "ls" hinzulegen, die mir einen root Zugang verschafft, wenn root sie ausführt. Wenn root jetzt das aktuelle Verzeichnis in seinem Pfad hätte, und ein "ls" machen würde, würde er mein Prgramm ausführen, statt dem richtigen ls.
Deshalb ist "." nicht per Default im Pfad. Wenn Du das änderst, solltest Du Dir nur darüber im Klaren sein. Auf einer single User Maschione zu Hause ist das mit Sicherheit wesentlich harmloser, als auf einem öffentlichen Pool Rechner.
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
jo, wie schon gezeigt, die ~/.bashrc um die Zeilen die ich schon gepostet habe ergänzen. Erstens gilt das nur für diesen User, und 2. werden die Eintäge in $PATH der Rehe nach durchsucht. Also ./ kommt ans ende und wird nur dann ausgeführt wenn im restichen $PATH nichts gefunden wurde. Also kannst Du auch ein Script oder Programm ls nennen. wenn Du dann in dem Verzeichnis ls eingibst wird trotzdem das "normale" ls ausgeführt. Um das script zu starten musst du dann wieder ./ls eingeben.
Gruß
Dookie
Gruß
Dookie