Bir oyun indirdim (Shank), ancak bin dosyası çalışmıyor. Yürütülebilir dosyayı başlatmaya çalıştığımda gösterilen hata:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Bir oyun indirdim (Shank), ancak bin dosyası çalışmıyor. Yürütülebilir dosyayı başlatmaya çalıştığımda gösterilen hata:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Yanıtlar:
Muhtemelen 32 bit desteği yüklü olmayan 64 bit sistemde 32 bitlik bir ikili dosya çalıştırmayı deniyorsunuzdur.
“Böyle bir dosya veya dizin yok” mesajını alabileceğiniz üç durum vardır:
file shank-linux-120720110-1-bin
“ELF 32-bit LSB çalıştırılabilir…” gibi bir şey görüntüler) ve henüz yürütmeye çalıştığınızda, dosyanın bulunmadığı söylenir.Bu son durumda hata mesajı kuşkusuz kafa karıştırıcı. Size anlattığı şey, programı çalıştırmak için gerekli çalışma zamanı ortamının temel bir bileşeninin eksik olmasıdır. Ne yazık ki, hatanın bildirildiği kanal, hata kodu için yeterli alana sahiptir ve bu fazladan bilgi için değil, gerçekten suçlanacak çalışma ortamı olduğu anlamına gelir. Bu açıklamanın teknik versiyonunu istiyorsanız, 64-bit bir sistemde 32-bit bir ikili dosya çalıştırırken “Bulunamadı” mesajını okuyun .
file
Komut bu ikili olduğunu sadece ne söyleyecektir. Birkaç istisna dışında, yalnızca Ubuntu sürümünüzün kullanıldığı işlemci mimarisi için bir ikili dosya çalıştırabilirsiniz. Bunun temel istisnası, 64 bit (amd64, aka x86_64) sistemlerinde 32 bit (x86, aka IA32) ikili dosyalarını çalıştırabilmenizdir.
11.04'e kadar Ubuntu'da, 64-bit bir kurulumda 32-bit bir ikili dosyayı çalıştırmak için ia32-libs
paketi kurmanız gerekir . Ek kitaplıklar yüklemeniz gerekebilir (yaparsanız açık bir hata mesajı alırsınız).
11.10 (oneiric), çok parçalı destek sunmaya başladığından beri , hala kurabilirsiniz ia32-libs
, ancak daha ince taneli bir yaklaşım seçebilirsiniz, bu almak için yeterlidir (ayrıca diğer gerekli kitaplıkları da).libc6-i386
ldd
Bir kütüphanenin eksik olup olmadığını kontrol etmek için kullanabilirsiniz . diğerleri arasında olduğu ldd kgio_ext.so
gibi bir şey diyebilirimlibruby.so.2.3 => not found
bash: ...some...path...: No such file or directory
: çalıştırılabilir dosyayı taşıdıktan sonra. Bash, $ PATH içinde bulunan çalıştırılabilir dosyaların önbelleklerini gösteriyor; hash -r
temizlemek için koş . Bakınız: unix.stackexchange.com/a/5610/11352
Bu cevabı sadece çıktıların file file-name
gösterilmesi durumunda uygulayın.
file-name: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
64 bit çok kemer Ubuntu sisteminde 32 bit yürütülebilir dosyayı çalıştırmak için, eklemek zorunda i386
mimarisi ve ayrıca yüklemek zorunda libc6:i386
, libncurses5:i386
, libstdc++6:i386
bu üç kütüphane paketleri.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
32 bit için deb'i yükleyerek bazı kütüphanelerin eksik olduğunu farkettim (ia32-libs ve libc6'ya ek olarak). Bu komutu ilk önce şu komutu vererek çözdüm:
sudo apt-get install -f
Sonra başka bir hata aldım:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Açıkçası, bu kütüphaneler doğru bir şekilde kuruldu. Ayrıntılara girmeden kütüphaneleri el ile bağlamak zorunda kaldım. Bunun Synaptic ile aşağıdaki paketleri kurmanın daha kolay bir çözüm olacağını da fark ettim:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Bundan sonra bir sonraki sorun, / Shank / bin'deki yürütülebilir dosyayı şununla değiştirerek çözdüğüm siyah ekrandı: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Umarım biri için faydalı olur. Daha fazla yardıma veya daha fazla ayrıntıya ihtiyacınız varsa, lütfen benimle iletişime geçmekten çekinmeyin.
İşte sorunun niteliği ve Ubuntu 16.04'ten itibaren nasıl düzeltileceği hakkında biraz daha fazla bilgi içeren bir transkript. file
"Dinamik olarak bağlantılı" raporlar olsa da , ldd
"dinamik bir çalıştırılabilir değil " bildirdiğine dikkat edin .
$ ./myprogram
bash: myprogram: No such file or directory
$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped
$ ldd myprogram
not a dynamic executable
Libc6: i386'yı yüklediğinizde, işler düzelmeye başlar ...
$ sudo apt-get install libc6:i386 # the initial fix
...
$ ldd myprogram
linux-gate.so.1 => (0xf77fd000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
/lib/ld-linux.so.2 (0x56578000)
$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
İşi tamamlamak için, bir kerede ek kitaplıklar tanımlamanız ve yüklemeniz gerekebilir ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Yüklenecek doğru kitaplıkları tanımlamanın sistematik bir yolu olup olmadığını bilmiyorum. Hata mesajlarını paket isimlerine eşleyen bir miktar tahmin çalışması vardır (sekme tamamlama yardımcı olur).
ldd
(yanlış) "dinamik bir çalıştırılabilir değil" bildirir.
@Gilles yanıtını genişletmek için, bu hatayla sonuçlanan en az üç senaryo vardır:
file
komut çalışıyor), şaşırtıcı bir hata mesajı veriyor. Bu, yükleyicide bir sorun olduğu anlamına gelebilir.Yükleyici problemlerinin kategorileri:
Bir çalıştırıcının yükleyicisi mevcut değil. Bunu file komutunu kullanarak kontrol edebilir ve yükleyicinin var olup olmadığına bakabilirsiniz. Örneğin
file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
Uyarı interpreter /lib64/ld-lsb-x86-64.so.3
; Bu dosya yoksa, yüklemeniz gerekir. 16.04'teki bu özel yükleyici için cevap olduğu ortaya çıktı sudo apt-get install lsb
.
Bir betiğin yükleyicisiyle ilgili sorunlar ( bu cevaba bakınız ).
ldd <file-name>
"bulunamadı" kütüphanelerini kontrol etmek için kullanın . Daha fazla bilgi için bu cevaba bakınız .Mevcut olmayan yükleyici, 32/64 bit uyumsuzluğu veya başka bir nedenle olabilir. Bilmediğim başka türden yükleyici hataları olabilir.
file lmutil
tercümanı göstermedi, fakat gösterdi ldd
ve kurmak lsb
sorunu çözdü.