Tôi đã tải xuống một trò chơi (Shank) nhưng tệp bin không chạy. Lỗi được hiển thị khi tôi cố khởi chạy tệp thực thi là:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Tôi đã tải xuống một trò chơi (Shank) nhưng tệp bin không chạy. Lỗi được hiển thị khi tôi cố khởi chạy tệp thực thi là:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Câu trả lời:
Có lẽ bạn đang cố chạy nhị phân 32 bit trên hệ thống 64 bit không cài đặt hỗ trợ 32 bit.
Có ba trường hợp bạn có thể nhận được thông báo. Không có tập tin hoặc thư mục nào như vậy:
file shank-linux-120720110-1-bin
hiển thị một cái gì đó giống như EL ELF 32 bit thực thi LSB), và khi bạn cố gắng thực thi thì bạn đã nói rằng tệp không tồn tại.Thông báo lỗi trong trường hợp cuối cùng này được thừa nhận là khó hiểu. Điều nó nói với bạn là một thành phần chính của môi trường thời gian chạy cần thiết để chạy chương trình bị thiếu. Thật không may, kênh thông báo lỗi chỉ có chỗ cho mã lỗi và không có thông tin bổ sung này thực sự là môi trường thời gian chạy đáng trách. Nếu bạn muốn phiên bản kỹ thuật của lời giải thích này, hãy đọc Nhận thông báo Không tìm thấy tin nhắn khi chạy một tệp nhị phân 32 bit trên hệ thống 64 bit .
Các file
lệnh sẽ cho bạn biết hệ nhị phân này là chỉ là những gì. Với một vài ngoại lệ, bạn chỉ có thể chạy nhị phân cho kiến trúc bộ xử lý mà bản phát hành Ubuntu của bạn dành cho. Ngoại lệ chính là bạn có thể chạy các tệp nhị phân 32 bit (x86, còn gọi là IA32) trên các hệ thống 64 bit (amd64, còn gọi là x86_64).
Trong Ubuntu tối đa 11.04, để chạy tệp nhị phân 32 bit khi cài đặt 64 bit, bạn cần cài đặt ia32-libs
gói . Bạn có thể cần cài đặt các thư viện bổ sung (bạn sẽ nhận được thông báo lỗi rõ ràng nếu bạn làm như vậy).
Kể từ 11.10 (Oneiric) giới thiệu multiarch hỗ trợ, bạn vẫn có thể cài đặt ia32-libs
, nhưng bạn có thể chọn một cách tiếp cận tốt hơn-grained, nó đủ để có được (cộng với bất kỳ thư viện cần thiết khác).libc6-i386
ldd
để kiểm tra nếu bạn thiếu một thư viện. ldd kgio_ext.so
có thể nói điều gì đó giống như libruby.so.2.3 => not found
những người khác
bash: ...some...path...: No such file or directory
có thể hiển thị: sau khi di chuyển tệp thực thi. Bash dường như lưu trữ các đường dẫn đến các tệp thực thi được tìm thấy trong $ PATH; chạy hash -r
để xóa nó Xem: unix.stackexchange.com/a/5610/11352
Chỉ làm theo câu trả lời này nếu đầu ra của file file-name
chương trình,
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
Để chạy tập tin thực thi 32bit trong một đa vòm hệ thống Ubuntu 64 bit, bạn phải thêm i386
kiến trúc và cũng có thể bạn phải cài đặt libc6:i386
, libncurses5:i386
, libstdc++6:i386
ba gói thư viện.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
Bằng cách cài đặt deb cho 32 bit, tôi nhận ra rằng tôi đã thiếu một số thư viện (ngoài ia32-libs và libc6). Trước tiên tôi đã giải quyết vấn đề này bằng cách đưa ra lệnh này:
sudo apt-get install -f
Sau đó, tôi đã nhận được một lỗi khác:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Rõ ràng, các thư viện đã được cài đặt đúng. Không đi sâu vào chi tiết, tôi phải liên kết các thư viện bằng tay. Tôi nhận ra rằng đó cũng có thể là một giải pháp dễ dàng hơn thông qua Synaptic cài đặt các gói sau:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Sau đó, vấn đề tiếp theo là màn hình đen trong khi chơi, tôi đã giải quyết bằng cách thay thế tệp thực thi trong / Shank / bin bằng cách này: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Tôi hy vọng nó sẽ hữu ích cho ai đó. Nếu bạn cần thêm trợ giúp hoặc biết thêm chi tiết xin vui lòng liên hệ với tôi.
Đây là bản ghi hiển thị thêm một chút về bản chất của sự cố và cách khắc phục sự cố kể từ Ubuntu 16.04. Lưu ý rằng mặc dù file
báo cáo "được liên kết động", ldd
báo cáo "không phải là tệp thực thi động".
$ ./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
Khi bạn cài đặt libc6: i386, mọi thứ bắt đầu cải thiện ...
$ 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
Để hoàn thành công việc, bạn có thể cần xác định và cài đặt từng thư viện bổ sung ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Tôi không biết nếu có một cách có hệ thống để xác định các thư viện chính xác để cài đặt. Có một chút phỏng đoán ánh xạ các thông báo lỗi thành tên gói (giúp hoàn thành tab).
ldd
(không chính xác) báo cáo "không phải là một thực thi động".
Để mở rộng câu trả lời @Gilles, có ít nhất ba kịch bản dẫn đến lỗi này:
file
lệnh hoạt động), tạo ra một thông báo lỗi khó hiểu. Điều này có thể có nghĩa là có vấn đề với trình tải.Các loại sự cố của trình tải:
Trình tải của tệp thực thi không tồn tại. Bạn có thể kiểm tra điều này bằng lệnh tập tin và xem liệu trình tải có tồn tại không. Ví dụ
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
Thông báo interpreter /lib64/ld-lsb-x86-64.so.3
; Nếu tập tin này không tồn tại, bạn cần cài đặt nó. Đối với trình tải đặc biệt này vào ngày 16.04, câu trả lời hóa ra là sudo apt-get install lsb
.
Các vấn đề với trình tải của tập lệnh (xem câu trả lời này ).
ldd <file-name>
để kiểm tra mọi thư viện "không tìm thấy". Xem câu trả lời này để biết thêm.Trình tải không tồn tại có thể là do sự không phù hợp 32/64 bit hoặc một số lý do khác. Có thể có các loại lỗi trình tải khác mà tôi không biết.
file lmutil
đã không hiển thị trình thông dịch, nhưng ldd
đã làm và cài đặt đã lsb
giải quyết vấn đề.