GNU/Linux >> Znalost Linux >  >> Linux

Spustitelný soubor Linuxu selže a soubor nebyl nalezen, i když soubor existuje a je v PATH

Toto:

$ file /usr/bin/wine
/usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, 
BuildID[sha1]=eaf6de433d8196e746c95d352e0258fe2b65ae24, stripped

V kombinaci s tímto:

$ ldd /usr/bin/wine
/usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory

Důrazně naznačuje, že systém nemá /lib/ld-linux.so.2 ELF tlumočník. To znamená, že tento 64bitový systém nemá nainstalované žádné 32bitové knihovny kompatibility. Odpověď @user1334609 je tedy v podstatě správná.


OK, posledních osm hodin jsem byl zaneprázdněn, abych znovu uvedl svůj systém do provozu po vypnutí přehřátí CPU. Po restartu se ukázalo, že je to tak podělané, že ani záložní konzole initrd už mou klávesnici nerozpoznala. Je pro mě záhadou, jak systém dokázal zůstat funkční tak dlouho, když jsem se snažil implementovat nespočet vašich návrhů (moc děkuji!!)

Problém při restartu:

Warning: /lib/modules/4.11.3-1-ARCH/modules.devname not found - ignoring
ERROR: device 'UUID=...' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=...'.
You are being dropped to a recovery shell
Type 'exit' to try and continue booting
sh: can't access tty: job control turned off

a žádná klávesnice poté nefunguje :-)

Problém byl:Aktualizace nahradila symbolický odkaz /lib -> /usr/lib s adresářem. To znamenalo, že všechny knihovny a moduly jádra, u kterých se očekává, že budou v /lib chyběly :-)

Takže jsem znovu vytvořil symbolický odkaz a přeinstaloval základní systém z živého CD.

Teď, když mám zase internet, našel jsem také toto vlákno

Použil jsem také správce balíčků mé zděné instalace na disku (nazvaného pacman ) z živého CD a přeinstalujte všechny balíčky základní skupiny (možná pouze jádro, takže balíček linux by stačilo, nevím)

Chcete-li toho dosáhnout, namontujte hlavní oddíl zděné instalace na /mnt adresář systému live CD a použijte chroot vytvořit pacman myslím /mnt je / (vložte hlavní oddíl zděného systému pro sdXXX )

mount /dev/sdXXX /mnt
# Recreate the /lib -> usr/lib symlink
ln -s usr/lib /lib  
# Mount essential system folders also to the respective subfolders of /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
# Fake /mnt to be /, so that pacman installs the packages to the correct  places
chroot /mnt
# Reinstall the Arch Linux base system
pacman -Sy base

Pro pořádek:vytvořte relativní symbolický odkaz, tedy ln -s usr/lib /mnt/lib a ne ln -s /usr/lib /mnt/lib , protože během časného spouštění systému (initrd fáze) bude hlavní oddíl připojen jako první k /new_root . Pokud by byl symbolický odkaz absolutní, při předčasném spouštění byste dostali výše uvedenou chybu.


Pokoušíte se spustit 32bitovou aplikaci na 64bitovém operačním systému, takže než to bude fungovat, musíte nainstalovat knihovny 32bitové kompatibility (zejména glibc).


Linux
  1. Jak připojit a odpojit souborový systém v Linuxu

  2. 'rm' nebyl nalezen v PATH nebo není spustitelný

  3. vmlinuz a initrd nebyly nalezeny po sestavení jádra?

  1. SH skript v $PATH není v Linuxu Alpine 3.11 nalezen

  2. /bin/ls nebyl nalezen, i když existuje!

  3. Linux:Kam umístit odkládací soubor

  1. Zlepšete výkon systému Linux pomocí noatime

  2. Jak zkontrolovat verzi OS a Linuxu

  3. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux