Böyle bir dosya ya da dizin yok? Ancak dosya var!


186

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

2
Belki önce "chmod u + x ./shank*bin"?
agent86

Ayrıca '-bin' yerine '.bin' olmamalı, belki de sadece bir yazım hatası
Anake

Cevabın için teşekkürler. Agent86 dediğiniz komutu yaptım ama aynı sonucu aldım. .Deb dosyasını da indirdim ancak bir sorun da var. Bu oyunda hangi sorunun olduğunu bilmiyorum.
Francesco,

Lütfen 64 bit kurulum çalıştırıp çalıştırmadığınızı onaylayın (bu, bu problemin en yaygın örneğidir).
Gilles,

Evet, dizüstü bilgisayarımda 64 bit mimari kullandığımı onaylıyorum.
Francesco,

Yanıtlar:


235

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:

  • Dosya mevcut değil. Sanırım dosyanın var olup olmadığını kontrol ettiniz (belki de kabuk onu tamamladığı için).
  • Bu isimde bir dosya var, ama sarkan sembolik bir bağ.
  • Dosya var ve onu bile okuyabilirsiniz (örneğin, komut 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 .

fileKomut 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-libspaketi kurmanız gerekir İa32-lib'leri yükleyin. 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 Libc6-i386'yı yükleyin


Harika bir cevap için teşekkürler Gilles. Bu problemi yaşamamış olmama rağmen (henüz!), Cevabınızı ileride başvurmak üzere reddetti.
Jim C

Ayrıntılı cevabınız için teşekkür ederiz! İndirdiğim dosya kutusu, bu biçimde kullanılabilen tek dosyadı (kutu). Bu yüzden tüm mimariler için iyi olduğunu düşünüyorum. Ayrıca mimarim için (64bit) .deb dosyasını indirdim ancak farklı bir hata oluştu. Bu noktada oyunun bazı hatalardan etkilendiğini düşünüyorum veya bu oyunu yükleyemiyorum. Şimdi libc6-i386'yı indirmeye çalışıyorum ve hala yüklemeyi deniyorum. Önemli değişiklikler olursa tekrar yazacağım. Zaman ayırdığın için teşekkür ederim.
Francesco,

2
@Francesco Lütfen çözümü gönderin! Ubuntu'da Shank'ı çalıştırmaya çalışan diğer insanlara yardımcı olması muhtemeldir. Kendi sorunuza cevap vermek tamamen sorun değil .
Gilles

1
lddBir kütüphanenin eksik olup olmadığını kontrol etmek için kullanabilirsiniz . diğerleri arasında olduğu ldd kgio_ext.sogibi bir şey diyebilirimlibruby.so.2.3 => not found
EnabrenTane

1
Görünüşe göre göründüğü zaman başka bir senaryo var 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 -rtemizlemek için koş . Bakınız: unix.stackexchange.com/a/5610/11352
akavel

53

64 bit Ubuntu Multiarch sistemleri

Bu cevabı sadece çıktıların file file-namegö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 i386mimarisi ve ayrıca yüklemek zorunda libc6:i386, libncurses5:i386, libstdc++6:i386bu üç 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

Son komut için sudo kullanırdım: 32 bitlik bir ikili dosya başlatmak (bu nedenle açıkça sizin tarafınızdan veya Ubuntu tarafından derlenmemiş) sudo riskli olabilir. (peki, kökün olmasa bile, itiraf etsin)
alci

Sonunda ne olabilir ama işe yarıyor.
Avinash Raj

1
CentOS veya RedHat kullanıyorsanız, bu cevabın geçerli olmadığı not edilmelidir. Bundan dolayı birkaç saat atıldı.
omikes

1
Kali 2 64 bit, yalnızca yüklemek zorunda kaldımlibselinux1:i386
Aralox

4

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.


3

İş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.
nobar

3

@Gilles yanıtını genişletmek için, bu hatayla sonuçlanan en az üç senaryo vardır:

  1. Dosya mevcut değil.
  2. Dosya var, ancak sarkan sembolik bir bağ.
  3. Dosya var (örneğin filekomut çalışıyor), şaşırtıcı bir hata mesajı veriyor. Bu, yükleyicide bir sorun olduğu anlamına gelebilir.

Yükleyici problemlerinin kategorileri:

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

  2. Bir betiğin yükleyicisiyle ilgili sorunlar ( bu cevaba bakınız ).

  3. Kayıp paylaşılan kütüphaneler - 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.


1
Benim durumumda, file lmutiltercümanı göstermedi, fakat gösterdi lddve kurmak lsbsorunu çözdü.
davidA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.