Saya sudah mengunduh game (Shank) tetapi file bin tidak berjalan. Kesalahan yang ditampilkan ketika saya mencoba meluncurkan executable adalah:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Saya sudah mengunduh game (Shank) tetapi file bin tidak berjalan. Kesalahan yang ditampilkan ketika saya mencoba meluncurkan executable adalah:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Jawaban:
Anda mungkin mencoba menjalankan biner 32-bit pada sistem 64-bit yang tidak memiliki dukungan 32-bit yang diinstal.
Ada tiga kasus di mana Anda bisa mendapatkan pesan "Tidak ada file atau direktori":
file shank-linux-120720110-1-bin
menampilkan sesuatu seperti "ELF 32-bit LSB executable ..."), namun ketika Anda mencoba untuk mengeksekusinya Anda diberitahu bahwa file tersebut tidak ada.Pesan kesalahan dalam kasus terakhir ini memang membingungkan. Apa yang dikatakannya kepada Anda adalah bahwa komponen kunci dari lingkungan runtime yang diperlukan untuk menjalankan program tidak ada. Sayangnya, saluran melalui mana kesalahan dilaporkan hanya memiliki ruang untuk kode kesalahan dan tidak untuk informasi tambahan ini bahwa itu benar-benar lingkungan runtime yang harus disalahkan. Jika Anda menginginkan versi teknis dari penjelasan ini, baca Memperoleh pesan "Tidak ditemukan" saat menjalankan biner 32-bit pada sistem 64-bit .
The file
perintah akan memberitahu Anda apa biner ini. Dengan beberapa pengecualian, Anda hanya dapat menjalankan biner untuk arsitektur prosesor untuk Ubuntu Anda. Pengecualian utama adalah Anda dapat menjalankan binari 32-bit (x86, alias IA32) pada sistem 64-bit (amd64, alias x86_64).
Di Ubuntu hingga 11,04, untuk menjalankan biner 32-bit pada instalasi 64-bit, Anda perlu menginstal ia32-libs
paket . Anda mungkin perlu menginstal pustaka tambahan (Anda akan mendapatkan pesan kesalahan eksplisit jika melakukannya).
Karena 11.10 (oneiric) memperkenalkan dukungan multiarch , Anda masih dapat menginstal ia32-libs
, tetapi Anda dapat memilih pendekatan yang lebih halus, cukup untuk mendapatkan (ditambah perpustakaan lain yang diperlukan).libc6-i386
ldd
untuk memeriksa apakah Anda kehilangan perpustakaan. ldd kgio_ext.so
mungkin mengatakan sesuatu seperti libruby.so.2.3 => not found
antara lain
bash: ...some...path...: No such file or directory
bisa muncul: setelah memindahkan file yang dapat dieksekusi. Bash tampaknya men-cache path ke executable yang ditemukan di $ PATH; lari hash -r
untuk membersihkannya. Lihat: unix.stackexchange.com/a/5610/11352
Ikuti jawaban ini hanya jika output file file-name
menunjukkan,
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
Untuk menjalankan file executable 32bit dalam multi-arch sistem Ubuntu 64 bit, Anda harus menambahkan i386
arsitektur dan juga Anda harus menginstal libc6:i386
, libncurses5:i386
, libstdc++6:i386
tiga paket perpustakaan tersebut.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
Dengan menginstal deb selama 32 bit saya menyadari bahwa saya kehilangan beberapa perpustakaan (selain ia32-libs dan libc6). Saya pertama kali memecahkan masalah ini dengan memberikan perintah ini:
sudo apt-get install -f
Lalu saya mendapat kesalahan lain:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Jelas, perpustakaan ini dipasang dengan benar. Tanpa merinci saya harus menghubungkan perpustakaan dengan tangan. Saya menyadari bahwa itu juga bisa menjadi solusi yang lebih mudah melalui Synaptic menginstal paket-paket berikut:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Setelah itu masalah berikutnya adalah layar hitam saat bermain, yang saya selesaikan dengan mengganti executable di / Shank / bin dengan ini: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Semoga bermanfaat bagi seseorang. Jika Anda memerlukan bantuan lebih banyak atau lebih banyak detail, jangan ragu untuk menghubungi saya.
Berikut adalah transkrip yang menunjukkan lebih banyak tentang sifat masalahnya, dan cara memperbaikinya pada Ubuntu 16.04. Perhatikan bahwa meskipun file
laporan "ditautkan secara dinamis", ldd
laporan "tidak dapat dieksekusi secara dinamis".
$ ./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
Setelah Anda menginstal libc6: i386, hal-hal mulai membaik ...
$ 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
Untuk menyelesaikan pekerjaan, Anda mungkin perlu mengidentifikasi dan menginstal perpustakaan tambahan satu per satu ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Saya tidak tahu apakah ada cara sistematis untuk mengidentifikasi perpustakaan yang benar untuk diinstal. Ada sedikit dugaan yang memetakan pesan kesalahan ke nama paket (penyelesaian tab membantu).
ldd
(salah) melaporkan "bukan eksekusi dinamis".
Untuk memperluas jawaban @Gilles, setidaknya ada tiga skenario yang menghasilkan kesalahan ini:
file
Perintah berfungsi), membuat pesan kesalahan yang membingungkan. Ini mungkin berarti ada masalah dengan loader.Kategori masalah loader:
Loader yang dapat dieksekusi tidak ada. Anda dapat memeriksa ini menggunakan perintah file dan melihat apakah loader memang ada. Misalnya
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
Perhatikan interpreter /lib64/ld-lsb-x86-64.so.3
; jika file ini tidak ada, Anda harus menginstalnya. Untuk pemuat khusus ini pada 16,04, jawabannya ternyata sudo apt-get install lsb
.
Masalah dengan pemuat skrip (lihat jawaban ini ).
ldd <file-name>
untuk memeriksa pustaka "tidak ditemukan". Lihat jawaban ini untuk info lebih lanjut.Loader yang tidak ada dapat disebabkan oleh ketidakcocokan 32/64 bit atau alasan lainnya. Mungkin ada jenis kesalahan pemuat lainnya yang tidak saya ketahui.
file lmutil
tidak menunjukkan penerjemah, tetapi ldd
melakukannya, dan menginstal lsb
memecahkan masalah.