Trình thông dịch ELF xấu 64 bit


183

Tôi vừa cài đặt phiên bản CentOS 6 64 bit, tôi đang cố cài đặt ứng dụng 32 bit trên máy 64 bit và gặp lỗi này:

/lib/ld-linux.so.2: trình thông dịch ELF xấu: Không có tệp hoặc thư mục như vậy

Tôi mới dùng linux. Làm thế nào để tôi giải quyết điều này?

Câu trả lời:


354

Bạn đang sử dụng hệ thống 64 bit và không cài đặt hỗ trợ thư viện 32 bit.

Để cài đặt (đường cơ sở) hỗ trợ cho các tệp thực thi 32 bit

(nếu bạn không sử dụng sudo trong thiết lập của mình, hãy đọc ghi chú bên dưới)

Hầu hết các hệ thống Linux dành cho máy tính để bàn trong gia đình Fedora / Red Hat:

 pkcon install glibc.i686

Có thể một số hệ thống Debian / Ubuntu trên máy tính để bàn?:

pkcon install ia32-libs

Fedora hoặc Red Hat mới hơn, CentOS:

 sudo dnf install glibc.i686

RHEL cũ hơn, CentOS:

   sudo yum install glibc.i686

Thậm chí cũ hơn RHEL, CentOS:

  sudo yum install glibc.i386

Debian hoặc Ubuntu:

   sudo apt-get install ia32-libs

nên lấy cho bạn thư viện (đầu tiên, chính) mà bạn cần.

Khi bạn đã có điều đó, có lẽ bạn sẽ cần libs hỗ trợ

Bất cứ ai cũng cần cài đặt glibc.i686hoặc glibc.i386có thể cũng sẽ chạy vào các phụ thuộc thư viện khác. Để xác định một gói cung cấp một thư viện tùy ý, bạn có thể sử dụng

 ldd /usr/bin/YOURAPPHERE

nếu bạn không chắc chắn thì nó /usr/bincũng có thể rơi vào

 ldd $(which YOURAPPNAME)

Đầu ra sẽ như thế này:

    linux-gate.so.1 =>  (0xf7760000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xf773e000)
    libSM.so.6 => not found

Kiểm tra các thư viện bị thiếu (ví dụ như libSM.so.6ở đầu ra ở trên) và cho mỗi thư viện bạn cần tìm gói cung cấp nó.

Các lệnh tìm gói cho mỗi gia đình phân phối

Fedora / Doanh nghiệp mũ đỏ / CentOS:

 dnf provides /usr/lib/libSM.so.6

hoặc, trên RHEL / CentOS cũ hơn:

 yum provides /usr/lib/libSM.so.6

hoặc, trên Debian / Ubuntu:

đầu tiên, cài đặt và tải xuống cơ sở dữ liệu cho apt-file

 sudo apt-get install apt-file && apt-file update

sau đó tìm kiếm với

 apt-file find libSM.so.6

Lưu ý đường dẫn tiền tố /usr/libtrong trường hợp (thông thường); hiếm khi, một số thư viện vẫn tồn tại /libvì lý do lịch sử trên các hệ thống 64 bit điển hình, thư viện 32 bit sống /usr/libvà thư viện 64 bit sống trong đó /usr/lib64.

(Debian / Ubuntu tổ chức các thư viện đa kiến ​​trúc khác nhau.)

Cài đặt gói cho các thư viện bị thiếu

Ở trên sẽ cung cấp cho bạn một tên gói, ví dụ:

libSM-1.2.0-2.fc15.i686 : X.Org X11 SM runtime library
Repo        : fedora
Matched from:
Filename    : /usr/lib/libSM.so.6

Trong ví dụ này tên của gói là libSMtên của phiên bản 32 bit của gói làlibSM.i686 .

Sau đó, bạn có thể cài đặt gói để lấy thư viện cần thiết bằng pkconGUI hoặc sudo dnf/yum/apt-getdưới dạng thích hợp. Ví dụ pkcon install libSM.i686. Nếu cần bạn có thể chỉ định phiên bản đầy đủ. Ví dụ sudo dnf install ibSM-1.2.0-2.fc15.i686.

Một số thư viện sẽ có một người chỉ định epoch tinh tinh trước tên của họ; điều này có thể được bỏ qua (tò mò có thể đọc các ghi chú bên dưới).

Ghi chú

Cảnh báo

Ngẫu nhiên, sự cố bạn gặp phải ngụ ý rằng cơ sở dữ liệu RPM (tương ứng DPkg / DSelect) của bạn bị hỏng hoặc ứng dụng bạn đang cố chạy không được cài đặt thông qua trình quản lý gói. Nếu bạn chưa quen với Linux, có lẽ bạn muốn tránh sử dụng phần mềm từ các nguồn khác ngoài trình quản lý gói của mình, bất cứ khi nào có thể ...

Nếu bạn không sử dụng "sudo" trong thiết lập của mình

Kiểu

su -c

mỗi khi bạn nhìn thấy sudo, ví dụ,

su -c dnf install glibc.i686

Giới thiệu về người thiết kế kỷ nguyên trong tên thư viện

Trình thiết kế epoch tinh tinh trước tên là một tạo tác của cách các thư viện RPM cơ bản xử lý số phiên bản; ví dụ

2:libpng-1.2.46-1.fc16.i686 : A library of functions for manipulating PNG image format files
Repo        : fedora
Matched from:
Filename    : /usr/lib/libpng.so.3

Ở đây, 2:có thể được bỏ qua; chỉ pkcon install libpng.i686hoặc sudo dnf install libpng-1.2.46-1.fc16.i686. (Nó mơ hồ ám chỉ cái gì đó như: tại một số điểm, số phiên bản của libpnggói cuộn ngược, và “thời đại” đã được tăng lên để đảm bảo các phiên bản mới hơn sẽ được coi là “mới” trong bản cập nhật Hoặc một cái gì đó tương tự đã xảy ra hai lần.. .)


Được cập nhật để làm rõ và bao gồm các tùy chọn trình quản lý gói khác nhau đầy đủ hơn (Tháng 3 năm 2016)


iv đã cài đặt mà bây giờ tôi đang nhận libpam.so.0: không thể mở tệp đối tượng được chia sẻ
c11ada

7
Nếu ứng dụng của bạn không liệt kê các thư viện cần thiết, bạn sẽ phải tự mình tìm kiếm và cài đặt chúng; nếu bạn may mắn, họ sẽ có mặt qua yum. Bạn có thể sử dụng "ldd (binary)" để liệt kê các thư viện. Đối với mỗi thư viện được liệt kê, sẽ không cung cấp thông báo như "/lib/ld-linux.so.2 (0x4f8d9000)" hoặc "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", Hãy thử: sudo yum cung cấp * / lib / libWHATEVER.so - để tìm (các) tên gói, sau đó sudo yum cài đặt PACKAGE.i686 để cài đặt nó. (Đảm bảo lấy i386 hoặc i686, không phải x86_64 vì nó sẽ cài đặt theo mặc định trên hệ thống của bạn)
BRPocock

Câu trả lời này là một ơn trời khi bạn có phần mềm 32 bit mà bạn phải di chuyển sang hệ thống 64 bit của mình.
froggythefrog

Điều này rất hữu ích để cài đặt Oracle's 1.7 trên Fedora 20. Ngoài glibc.i686, tôi đã phải cài đặt libgcc.i686.
John Schmitt

17

Cũng gặp phải vấn đề tương tự trên máy CentOS 6.4 64 bit mới cài đặt. Một lệnh yum duy nhất sẽ khắc phục điều này cộng với 99% các vấn đề tương tự:

yum nhóm cài đặt "Thư viện tương thích"

Hoặc là tiền tố này với 'sudo' hoặc chạy dưới quyền root, bất cứ điều gì phù hợp nhất với bạn.


14

Nói chung, khi bạn gặp một lỗi như thế này, chỉ cần làm

yum provides ld-linux.so.2

sau đó bạn sẽ thấy một cái gì đó như:

glibc-2.20-5.fc21.i686 : The GNU libc libraries
Repo        : fedora
Matched from:
Provides    : ld-linux.so.2

và sau đó bạn chỉ cần chạy như sau BRPocock đã viết (trong trường hợp bạn đang tự hỏi logic là gì ...):

yum install glibc.i686

3

Thử

$ yum provides ld-linux.so.2
$ yum update
$ yum install glibc.i686 libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6

Hy vọng điều này sẽ xóa.


0

Chỉ muốn thêm một nhận xét trong BRPocock, nhưng tôi không có đủ đặc quyền.

Vì vậy, đóng góp của tôi là cho mọi người đang cố gắng cài đặt Bộ công cụ tích hợp của IBM từ gói Bus tích hợp của IBM.

Khi bạn cố chạy lệnh "Trình quản lý cài đặt" từ thư mục / Integration_Toolkit / IM_Linux (tệp cần chạy là "cài đặt"), bạn sẽ gặp lỗi hiển thị trong bài đăng này.

Hướng dẫn thêm để khắc phục sự cố này bạn sẽ tìm thấy trong trang web của IBM này: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Hy vọng điều này sẽ giúp cho bất cứ ai cố gắng để cài đặt đó.


0

sudo yum cài đặt fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc ++. so.6


0

Tôi sẽ thêm cho Debian bạn cần ít nhất một trình biên dịch trong hệ thống (theo thư viện Debian Stretch và Jessie 32-bit ).

Tôi đã cài đặt apt-get install -y gcc-multilibđể chạy tệp thực thi 32 bit trong bộ chứa docker của mình dựa trên debian: jessie.


vui lòng bao gồm các phần thiết yếu của liên kết trong câu trả lời của bạn
Ibo

0

Bạn cũng có thể cài đặt OpenJDK 32-bit ( .i686). Theo thử nghiệm của tôi, nó sẽ được cài đặt và hoạt động mà không gặp vấn đề gì.

sudo yum install java-1.8.0-openjdk.i686

Ghi chú:

Gói java-1.8.0-openjdk chỉ chứa Môi trường chạy thi hành Java . Nếu bạn muốn phát triển các chương trình Java thì hãy cài đặt gói java-1.8.0-openjdk-devel .

Xem ở đây để biết thêm chi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.