Fehler: Datei nicht gefunden beim Ausführen einses Programms

Der Fehler "Datei oder Verzeichnis nicht gefunden" ist für gewöhnlich recht eindeutig. Wenn jedoch das binäre Programm, welches man gerade ausführt startete und dann sofort mit diesem Fehler abbricht, beginnt das Rätsel.

(Exemplarisch soll das besagte Programm hier "prg" genannt werden.)

./prg

bash: ./prg: Datei oder Verzeichnis nicht gefunden

Natürlich kommt man recht bald darauf mittels chmod mal ein "0777" auf das Programm anzuwenden...was aber hier nicht das Problem ist.

Als Erstes würde ich mal dem Programm mit strace beim "Denken" zusehen:

strace -s 1024 -f ./prg 

execve("./prg", ["./prg"], 0x7ffc16696e88 / 51 vars /) = -1 ENOENT (No such file or directory) fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 write(2, "strace: exec: No such file or directory\n", 40strace: exec: No such file or directory ) = 40 getpid() = 3856 exit_group(1) = ? +++ exited with 1 +++

Rätselhaft! Bevor ich nun noch eine Session des GNU Debuggers hier mitgebe und den recht naheliegenden Weg über ldd nachvollziehe, komme ich mal direkt zum eigentlichen Problem...und zur Lösung.

Diese findet sich nämlich schon dort, wo man sich die Datei mittels file ansieht:

file prg

prg: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 2.6.24, BuildID[sha1]=256872161c75c59fb995c63cb13b6f48c8630ce6, with debug_info, not stripped

Öhhhmmmm, warte...

uname -a

Linux desktop 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Uuups, es handelt sich offenbar um eine 32Bit-Binary, die versucht wird auf einem 64Bit-System auszuführen. Kurzum:
Es muss dem Linux (wieder) beigebracht werden, 32Bit-Anwendungen auszuführen.

sudo apt-get install ia32-libs lib32z1 lib32ncurses5

Nun geht's!