ฉันดาวน์โหลดเกม (Shank) แล้ว แต่ไฟล์ bin ไม่ทำงาน ข้อผิดพลาดที่แสดงเมื่อฉันพยายามเปิดใช้งานโปรแกรมเรียกทำงานคือ:
bash: ./shank-linux-120720110-1-bin: No such file or directory
ฉันดาวน์โหลดเกม (Shank) แล้ว แต่ไฟล์ bin ไม่ทำงาน ข้อผิดพลาดที่แสดงเมื่อฉันพยายามเปิดใช้งานโปรแกรมเรียกทำงานคือ:
bash: ./shank-linux-120720110-1-bin: No such file or directory
คำตอบ:
คุณอาจพยายามเรียกใช้ไบนารี 32 บิตบนระบบ 64 บิตที่ไม่ได้รับการสนับสนุน 32 บิต
มีสามกรณีที่คุณสามารถรับข้อความ“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว”:
file shank-linux-120720110-1-bin
จะแสดงบางอย่างเช่น "ปฏิบัติการเอลเอสบี 32- บิต LSB ... ") และเมื่อคุณพยายามเรียกใช้งานคุณจะได้รับแจ้งว่าไฟล์นั้นไม่มีอยู่ข้อความแสดงข้อผิดพลาดในกรณีนี้ทำให้เกิดความสับสน สิ่งที่บอกคุณคือองค์ประกอบสำคัญของสภาพแวดล้อมรันไทม์ที่จำเป็นในการเรียกใช้โปรแกรมขาดหายไป น่าเสียดายที่ช่องทางที่รายงานข้อผิดพลาดนั้นมีที่ว่างสำหรับรหัสข้อผิดพลาดเท่านั้นและไม่ได้มีไว้สำหรับข้อมูลเพิ่มเติมนี้ซึ่งเป็นสภาพแวดล้อมรันไทม์ที่ต้องโทษ หากคุณต้องการรุ่นทางเทคนิคของคำอธิบายนี้อ่านการ“ไม่พบ” ข้อความเมื่อทำงานไบนารี 32 บิตบนระบบ
file
คำสั่งจะบอกคุณเพียงแค่สิ่งที่ไบนารีนี้อยู่ ด้วยข้อยกเว้นบางประการคุณสามารถเรียกใช้ไบนารีสำหรับสถาปัตยกรรมตัวประมวลผลที่ Ubuntu ของคุณใช้สำหรับเท่านั้น ข้อยกเว้นหลักคือคุณสามารถรันไบนารีแบบ 32 บิต (x86, aka IA32) บนระบบ 64- บิต (amd64, aka x86_64)
ใน Ubuntu ถึง 11.04 เพื่อใช้ไบนารี 32 บิตในการติดตั้ง 64 บิตคุณจำเป็นต้องติดตั้งia32-libs
แพคเกจ คุณอาจต้องติดตั้งไลบรารีเพิ่มเติม (คุณจะได้รับข้อความแสดงข้อผิดพลาดอย่างชัดเจน)
ตั้งแต่ 11.10 (oneiric) แนะนำการสนับสนุนมัลติฮาร์ทคุณยังสามารถติดตั้งia32-libs
ได้ แต่คุณสามารถเลือกวิธีที่ละเอียดยิ่งขึ้นก็เพียงพอที่จะรับ(รวมทั้งไลบรารีที่จำเป็นอื่น ๆ )libc6-i386
ldd
เพื่อตรวจสอบว่าคุณไม่มีห้องสมุดหรือไม่ ldd kgio_ext.so
อาจพูดบางสิ่งบางอย่างเหมือนlibruby.so.2.3 => not found
คนอื่น ๆ
bash: ...some...path...: No such file or directory
สามารถแสดง: หลังจากย้ายไฟล์ปฏิบัติการ Bash ดูเหมือนว่าจะแคชพา ธ ไปยัง executables ที่พบใน $ PATH; วิ่งhash -r
เพื่อล้างมัน ดู: unix.stackexchange.com/a/5610/11352
ทำตามคำตอบนี้เฉพาะเมื่อผลลัพธ์ของfile file-name
รายการ
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
เมื่อต้องการเรียกใช้แฟ้มที่ปฏิบัติการ 32 บิตใน 64 บิตหลายโค้งระบบอูบุนตู, คุณจะต้องเพิ่มi386
สถาปัตยกรรมและยังให้คุณมีการติดตั้งlibc6:i386
, libncurses5:i386
, libstdc++6:i386
เหล่านี้สามแพคเกจห้องสมุด
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
ด้วยการติดตั้ง deb สำหรับ 32 บิตฉันรู้ว่าฉันขาดไลบรารี่บางส่วน (นอกเหนือจาก ia32-libs และ libc6) ฉันก่อนแก้ไขปัญหานี้โดยให้คำสั่งนี้:
sudo apt-get install -f
จากนั้นฉันได้รับข้อผิดพลาดอื่น:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
เห็นได้ชัดว่าห้องสมุดเหล่านี้ติดตั้งอย่างถูกต้อง โดยไม่ต้องลงรายละเอียดฉันต้องเชื่อมโยงห้องสมุดด้วยมือ ฉันรู้แล้วว่าสามารถแก้ปัญหาได้ง่ายขึ้นผ่านทาง Synaptic ติดตั้งแพคเกจต่อไปนี้:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
หลังจากนั้นปัญหาต่อไปคือหน้าจอสีดำในขณะที่เล่นซึ่งฉันแก้ไขโดยแทนที่ปฏิบัติการใน / Shank / bin ด้วย: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2
ฉันหวังว่ามันจะเป็นประโยชน์กับใครบางคน หากคุณต้องการความช่วยเหลือเพิ่มเติมหรือรายละเอียดเพิ่มเติมโปรดติดต่อฉัน
นี่คือหลักฐานที่แสดงให้เห็นเพิ่มเติมเล็กน้อยเกี่ยวกับลักษณะของปัญหาและวิธีการแก้ไขในฐานะ Ubuntu 16.04 โปรดสังเกตว่าถึงแม้ว่าfile
รายงาน "ลิงก์แบบไดนามิก" แต่ldd
รายงาน "ไม่ใช่ไฟล์ที่รันได้แบบไดนามิก"
$ ./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 สิ่งต่าง ๆ เริ่มดีขึ้น ...
$ 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
เพื่อให้งานสำเร็จคุณอาจต้องระบุและติดตั้งไลบรารีเพิ่มเติมทีละรายการ ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
ฉันไม่รู้ว่ามีวิธีที่เป็นระบบในการระบุไลบรารีที่ถูกต้องที่จะติดตั้งหรือไม่ มีการคาดเดาเล็กน้อยในการจับคู่ข้อความแสดงข้อผิดพลาดกับชื่อแพคเกจ
ldd
(ไม่ถูกต้อง) รายงาน "ไม่ใช่ไฟล์เรียกทำงานแบบไดนามิก"
หากต้องการขยายคำตอบ @Gilles มีอย่างน้อยสามสถานการณ์ที่ทำให้เกิดข้อผิดพลาดนี้:
file
คำสั่งใช้งานได้) ทำให้เกิดข้อผิดพลาดที่ทำให้งง นี่อาจหมายความว่ามีปัญหากับตัวโหลดหมวดหมู่ของปัญหาตัวโหลด:
โหลดเดอร์ของ executable ไม่มีอยู่ คุณสามารถตรวจสอบได้โดยใช้คำสั่ง file และดูว่าตัวโหลดนั้นมีอยู่หรือไม่ เช่น
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
ประกาศinterpreter /lib64/ld-lsb-x86-64.so.3
; หากไฟล์นี้ไม่มีอยู่คุณจะต้องติดตั้ง สำหรับรถตักดินแบบนี้โดยเฉพาะในวันที่ 16.04 sudo apt-get install lsb
คำตอบเปิดออกมาเป็น
ปัญหาเกี่ยวกับโหลดเดอร์ของสคริปต์ (ดูคำตอบนี้ )
ldd <file-name>
เพื่อตรวจสอบไลบรารี "ไม่พบ" ใด ๆ ดูคำตอบนี้สำหรับข้อมูลเพิ่มเติมตัวโหลดที่ไม่ได้มีอยู่อาจเป็นเพราะ 32/64 บิตไม่ตรงกันหรือสาเหตุอื่น อาจมีข้อผิดพลาดของโหลดเดอร์ชนิดอื่นที่ฉันไม่รู้
file lmutil
ไม่ได้แสดงล่าม แต่ldd
ทำและติดตั้งlsb
แก้ปัญหาได้