|
wookenny
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

24. April 2012 21:35
Hi,
ich habe folgendes Problem: Ich möchte eine Datei ausführen, Ubuntu sagt aber, das sie nicht gefunden wird.
Hier die Shell: torsten@gretel:~$ /tmp/I
bash: /tmp/I: No such file or directory
torsten@gretel:~$ ls /tmp/I
/tmp/I
torsten@gretel:~/Desktop/SoftwareProjekte/4k-Playground$ file /tmp/I
/tmp/I: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), stripped
torsten@gretel:~/Desktop/SoftwareProjekte/4k-Playground$ wc -c /tmp/I
3920 /tmp/I
Es handelt sich um meine Gehversuche in Richtung 4k Intros. Unter Suse kann ich das Programm kompilieren und ausführen.
Bei einer früheren Version klappte das Ausführen, unter 11.10 aber nicht mehr. Hat jemand Erfahrungen damit?
|
|
senden9
Anmeldungsdatum: Feb. 8, 2010
Beiträge: 461
|

24. April 2012 21:48
Hast du´s schon mal mit
versucht?
|
|
wookenny
(Themenstarter)
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

24. April 2012 21:54
Ja, ausführbar ist die Datei.
| ls -ls /tmp/I
4 -rwxrwxr-x 1 torsten torsten 3920 2012-04-24 21:21 /tmp/I
|
|
|
Vain
Anmeldungsdatum: April 12, 2008
Beiträge: 2234
|

24. April 2012 21:58
Servus, kannst du die Binary mal hier reinstellen, damit man sich das anschauen kann? Die Chancen steigen dann, dass dem ein oder anderen etwas auffällt.
|
|
wookenny
(Themenstarter)
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

24. April 2012 22:01
- I (0.0 KiB)
- I herunterladen
|
|
track
Anmeldungsdatum: Juni 26, 2008
Beiträge: 4742
Wohnort: Wolfen (S-A)
|

24. April 2012 22:25
Bei mir sagt er zu dieser Datei: track@lucid:~$ Downloads/I
bash: Downloads/I: Kann die Datei nicht ausführen.
track@lucid:~$ gdb Downloads/I
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 ...
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
"/home/track/Downloads/I": not in executable format: File format not recognized
(gdb) ... allerdings auf einer 32-Bit-Kiste. Wie hast Du das denn kompiliert ? - ( was sagen diese Befehle bei Dir ? ) LG, track
|
|
BodomBeachTerror
Anmeldungsdatum: März 24, 2008
Beiträge: 787
|

24. April 2012 22:34
Ist dein Ubuntu zufällig 32 Bit?
|
|
wookenny
(Themenstarter)
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

24. April 2012 22:48
Ich habe ein 64bit Ubuntu. Kompiliert habe ich etwa so:
| gcc -Os -fomit-frame-pointer -fno-inline -c raymarching.c -o main.o
ld -dynamic-linker /lib/ld-linux.so.2 main.o /usr/lib/libSDL.so /usr/lib/libSDL_gfx.so -o s
|
GDB sagt:
| Code(gdb) run
Starting program: /tmp/I
/bin/bash: /tmp/I: No such file or directory
During startup program exited with code 127.
|
|
|
Kinch
Anmeldungsdatum: Okt. 6, 2007
Beiträge: 1263
|

24. April 2012 22:56
Die Binary ist defekt. Finde deinen Kompilier aufruf auch sehr merkwürdig, aber kann nicht wirklich sagen, ob er falsch ist oder nicht. Aber '-o' vom gcc hat bereits einen Linking-Step, insofern habe ich den Eindruck, hier wird zweimal gelinkt. Edit: Hat sich erledigt, ich habe das '-c' Flag übersehen.
|
|
wookenny
(Themenstarter)
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

24. April 2012 23:13
Die Quelldate hat keine richtige main()-Methode, damit die binary kleiner ist. Stattdessen eine _start()-Methode.
Ich kann mir vorstellen, dass die Datei defekt ist,
Aber selbst wenn die Datei defekt ist, warum sagt mir die bash, das die Datei nicht gefunden wird?
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2054
|

25. April 2012 07:34
wookenny schrieb: Die Quelldate hat keine richtige main()-Methode, damit die binary kleiner ist. Stattdessen eine _start()-Methode.
Ich kann mir vorstellen, dass die Datei defekt ist,
Aber selbst wenn die Datei defekt ist, warum sagt mir die bash, das die Datei nicht gefunden wird?
Die Fehlermeldung könnte insofern irreführend sein, dass ggf. eine andere Datei gemeint ist und Du "/tmp/I" nur siehst, weil es das Programm ist, in dem der Fehler auftritt. Ciao robert
|
|
Kinch
Anmeldungsdatum: Okt. 6, 2007
Beiträge: 1263
|

25. April 2012 07:48
wookenny Aber selbst wenn die Datei defekt ist, warum sagt mir die bash, das die Datei nicht gefunden wird?
Die Fehlermeldung kommt oft, wenn man versucht eine defekte Binary auszuführen. Mit 'strace' kann man meistens herausfinden, woher das kommt. Auf meinem System ist die Fehlermeldung auch sinniger: zsh: accessing a corrupted shared library: ./I
Die Quelldate hat keine richtige main()-Methode,
Ach, linkst du deshalb mit ld statt mit gcc? Wenn es dir um die Größe geht, musst du wohl direkt Assembler schreiben.
|
|
wookenny
(Themenstarter)
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

25. April 2012 09:46
Bin bei der Arbeit, an einem Suse Rechner. Hier kann ich diese Datei auch nicht ausführen.
Das liegt aber daran, dass die Pfade falsch sind, die beim Linken benutzt wurden. Ich teste später dann mal strace unter Ubuntu.
|
|
wookenny
(Themenstarter)
Anmeldungsdatum: Juni 30, 2007
Beiträge: 14
|

25. April 2012 18:49
Vielen Dank für den Hinweis auf strace, mit der Ausgabe kann ich weiter an den Ursachen forschen.
1
2
3
4
5
6
7
8
9
10
11
12
13 | strace /tmp/I
execve("/tmp/I", ["/tmp/I"], [/* 45 vars */]) = -1 ENOENT (No such file or directory)
dup(2) = 3
fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7515c80000
lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
close(3) = 0
munmap(0x7f7515c80000, 4096) = 0
exit_group(1) = ?
|
|
|
Kinch
Anmeldungsdatum: Okt. 6, 2007
Beiträge: 1263
|

25. April 2012 22:21
Ja, der execv-Befehl schlägt schon fehl. Ich nehme an, dass ENOENT als Rückgabewert einfach falsch ist. Auf meinem System kommt an der Stelle auch ELIBBAD, was schon sinniger ist. Jedenfalls, ich denke, du solltest schon C idiomatisch schreiben, sprich eine Main-Methode haben. Die Binary-Größe wird dadurch auch nicht nennenswert beinflusst, so dass der ganze Ansatz schon nicht so zielführend ist.
|