gcc erzeugt Datein die ich nicht ausführen kann

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
choji
Beiträge: 166
Registriert: 16.08.2003 00:36:52

gcc erzeugt Datein die ich nicht ausführen kann

Beitrag von choji » 26.09.2003 14:38:30

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

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 26.09.2003 14:56:25

Was meinst Du mit nicht ausführbar?
Was passiert denn, wenn Du versuchst die Datei auszuführen?

julien
Beiträge: 1062
Registriert: 06.05.2002 19:53:05
Wohnort: Oberhessen

Beitrag von julien » 26.09.2003 15:32:22

Hast du die Datei mit chmod +x ausführbar gemacht und dann mit ./dateiname gestartet?

svenputze

Rechte / Pfad ?

Beitrag von svenputze » 26.09.2003 15:37:32

was bekommst Du denn nach einem

Code: Alles auswählen

ls -la
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

Code: Alles auswählen

./dateiname
, damit der Kommandointerpreter gezwungen wird, direkt in diesem Verzeichnis zu suchen.

Gruss
Sven

choji
Beiträge: 166
Registriert: 16.08.2003 00:36:52

Beitrag von choji » 26.09.2003 16:05:56

Ok nachdem ich den Komandointerpreter zu dieser Datei gezwungen habe gehts.

Also sprich ich bin in meinem Home-Verzeichnis und die Datei heist execuebung

Code: Alles auswählen

choji@debian:~$ execuebung
... damit geht es net,

Code: Alles auswählen

choji@debian:~$ ./execuebung
... 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

tylerD
Beiträge: 4068
Registriert: 10.07.2002 17:34:13
Wohnort: Halle/Saale
Kontaktdaten:

Beitrag von tylerD » 26.09.2003 16:09:24

choji hat geschrieben: Kann mir jetzt noch jemand erkären warum? Bzw wo man dieses wieder einstellen kann das des auch ohne ./ geht?
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.

cu

choji
Beiträge: 166
Registriert: 16.08.2003 00:36:52

Beitrag von choji » 26.09.2003 16:18:29

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.

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 26.09.2003 16:43:17

nein, das will man auch nicht.

tylerD
Beiträge: 4068
Registriert: 10.07.2002 17:34:13
Wohnort: Halle/Saale
Kontaktdaten:

Beitrag von tylerD » 26.09.2003 18:02:12

Nein ein kleiner Punkt (also . ) ist ein Synonym für das aktuelle Verzeichniss. Wenn du also einen . zu deinem Path hinzufügst, ist immer das aktuelle Verzeichniss in dem du dich befindest im Path enthalten.
Aber wie gesagt, es hat eigentlich schon seinen Grund warum das nicht dort ist.

cu

Benutzeravatar
Dookie
Beiträge: 1104
Registriert: 17.02.2002 20:38:19
Wohnort: Salzburg
Kontaktdaten:

Beitrag von Dookie » 26.09.2003 19:01:58

Hi suntsu,

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
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

choji
Beiträge: 166
Registriert: 16.08.2003 00:36:52

Beitrag von choji » 26.09.2003 19:58:56

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 :lol:

Gruß choji

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 27.09.2003 05:34:35

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
Definitely not a bot...
Jabber: pdreker@debianforum.de

choji
Beiträge: 166
Registriert: 16.08.2003 00:36:52

Beitrag von choji » 27.09.2003 11:18:51

ok Dann die Frage nach dem Mittelweg. Gibt es die Möglichkeit festzulegen, dass nur ein User z.B. eben ich und nicht root und andere "." im PATH haben?

Benutzeravatar
Dookie
Beiträge: 1104
Registriert: 17.02.2002 20:38:19
Wohnort: Salzburg
Kontaktdaten:

Beitrag von Dookie » 27.09.2003 12:08:56

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

choji
Beiträge: 166
Registriert: 16.08.2003 00:36:52

Beitrag von choji » 27.09.2003 15:41:10

Ok Danke euch allen für die Lösung dieses Problems :D

Gruß
choji

Antworten