CentOS 64 bit ELF interpreter yang buruk

183

Saya baru saja menginstal versi CentOS 6 64bit, saya mencoba untuk menginstal aplikasi 32-bit pada mesin 64-bit dan mendapat kesalahan ini:

/lib/ld-linux.so.2: interpreter ELF buruk: Tidak ada file atau direktori seperti itu

Saya baru mengenal linux. Bagaimana saya mengatasi ini?

c11ada
sumber

Jawaban:

355

Anda menggunakan sistem 64-bit, dan tidak memiliki dukungan pustaka 32-bit yang diinstal.

Untuk menginstal (baseline) dukungan untuk executable 32-bit

(jika Anda tidak menggunakan sudo dalam pengaturan Anda, baca catatan di bawah)

Sebagian besar sistem desktop Linux di keluarga Fedora / Red Hat:

 pkcon install glibc.i686

Mungkin beberapa sistem desktop Debian / Ubuntu ?:

pkcon install ia32-libs

Fedora atau Red Hat, CentOS yang lebih baru:

 sudo dnf install glibc.i686

RHEL Lama, CentOS:

   sudo yum install glibc.i686

RHEL yang lebih tua, CentOS:

  sudo yum install glibc.i386

Debian atau Ubuntu:

   sudo apt-get install ia32-libs

harus mengambil perpustakaan (pertama, utama) yang Anda butuhkan.

Setelah Anda memilikinya, Anda mungkin membutuhkan lib dukungan

Siapa pun yang perlu menginstal glibc.i686atau glibc.i386mungkin akan mengalami dependensi perpustakaan lain, juga. Untuk mengidentifikasi paket yang menyediakan pustaka sewenang-wenang, Anda dapat menggunakan

 ldd /usr/bin/YOURAPPHERE

jika Anda tidak yakin itu ada di dalam, /usr/binAnda juga bisa kembali

 ldd $(which YOURAPPNAME)

Outputnya akan terlihat seperti ini:

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

Periksa pustaka yang hilang (misalnya libSM.so.6dalam output di atas), dan untuk masing-masing Anda perlu menemukan paket yang menyediakannya.

Perintah untuk menemukan paket per keluarga distribusi

Fedora / Red Hat Enterprise / CentOS:

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

atau, pada RHEL / CentOS yang lebih lama:

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

atau, di Debian / Ubuntu:

pertama, instal dan unduh database untuk apt-file

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

lalu cari dengan

 apt-file find libSM.so.6

Catat jalur awalan /usr/libdalam kasus (biasa); jarang, beberapa perpustakaan masih hidup di bawah /libkarena alasan historis ... Pada sistem 64-bit yang khas, perpustakaan 32-bit tinggal di /usr/libdan perpustakaan 64-bit tinggal di /usr/lib64.

(Debian / Ubuntu mengatur perpustakaan multi-arsitektur secara berbeda.)

Menginstal paket untuk perpustakaan yang hilang

Di atas akan memberi Anda nama paket, misalnya:

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

Dalam contoh ini nama paketnya libSMdan nama versi 32bit dari paket tersebutlibSM.i686 .

Anda kemudian dapat menginstal paket untuk mengambil pustaka yang diperlukan menggunakan pkcondalam GUI, atau yang sudo dnf/yum/apt-getsesuai .... Misalnya pkcon install libSM.i686. Jika perlu, Anda dapat menentukan versi sepenuhnya. Misalnya sudo dnf install ibSM-1.2.0-2.fc15.i686.

Beberapa perpustakaan akan memiliki penanda "zaman" sebelum namanya; ini bisa dihilangkan (yang penasaran bisa membaca catatan di bawah).

Catatan

Peringatan

Secara kebetulan, masalah yang Anda hadapi baik menyiratkan bahwa RPM (resp. DPkg / DSelect) database Anda rusak, atau bahwa aplikasi yang Anda coba jalankan tidak diinstal melalui manajer paket. Jika Anda baru mengenal Linux, Anda mungkin ingin menghindari menggunakan perangkat lunak dari sumber selain manajer paket Anda, jika memungkinkan ...

Jika Anda tidak menggunakan "sudo" dalam pengaturan Anda

Tipe

su -c

setiap kali Anda melihat sudo, misalnya,

su -c dnf install glibc.i686

Tentang penunjuk zaman dalam nama perpustakaan

Penunjuk "zaman" sebelum nama adalah artefak cara perpustakaan RPM yang mendasari menangani nomor versi; misalnya

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

Di sini, 2:bisa dihilangkan; hanya pkcon install libpng.i686atau sudo dnf install libpng-1.2.46-1.fc16.i686. (Ini samar-samar menyiratkan sesuatu seperti: pada titik tertentu, nomor versi libpngpaket bergulir ke belakang, dan "zaman" harus ditambahkan untuk memastikan versi yang lebih baru akan dianggap "lebih baru" selama pembaruan. Atau sesuatu yang serupa terjadi. Dua kali .)


Diperbarui untuk mengklarifikasi dan mencakup berbagai opsi manajer paket lebih lengkap (Maret, 2016)

BRPocock
sumber
iv diinstal yang sekarang saya mendapatkan libpam.so.0: tidak dapat membuka file objek bersama
c11ada
7
Jika aplikasi Anda tidak mencantumkan pustaka yang diperlukan, Anda harus memburunya dan menginstalnya sendiri; jika Anda beruntung, mereka akan tersedia melalui yum. Anda dapat menggunakan "ldd (binary)" untuk membuat daftar pustaka. Untuk setiap perpustakaan yang terdaftar, itu tidak memberikan pembacaan seperti "/lib/ld-linux.so.2 (0x4f8d9000)" atau "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", coba: sudo yum menyediakan * / lib / libWHATEVER.so - untuk menemukan nama paket, dan kemudian sudo yum instal PACKAGE.i686 untuk menginstalnya. (Pastikan untuk mengambil i386 atau i686, bukan x86_64 seperti yang akan diinstal secara default pada sistem Anda)
BRPocock
Jawaban ini adalah berkah Tuhan ketika Anda memiliki perangkat lunak 32-bit yang harus Anda migrasi ke sistem 64-bit Anda.
froggythefrog
Ini sangat membantu untuk menginstal Oracle 1.7 di Fedora 20. Selain glibc.i686, saya harus menginstal libgcc.i686.
John Schmitt
17

Baru saja menemukan masalah yang sama pada mesin CentOS 6.4 64-bit yang baru diinstal. Perintah yum tunggal akan memperbaiki ini ditambah 99% dari masalah serupa:

yum groupinstall "Perpustakaan kompatibilitas"

Baik awali ini dengan 'sudo' atau jalankan sebagai root, mana yang paling cocok untuk Anda.

Phil Edwards
sumber
14

Secara umum, ketika Anda mendapatkan kesalahan seperti ini, lakukan saja

yum provides ld-linux.so.2

maka Anda akan melihat sesuatu seperti:

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

dan kemudian Anda hanya menjalankan yang berikut seperti yang ditulis BRPocock (jika Anda bertanya-tanya apa logikanya ...):

yum install glibc.i686
Moe Singh
sumber
3

Mencoba

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

Semoga ini jelas.

Bumpaster
sumber
0

Hanya ingin menambahkan komentar di BRPocock, tetapi saya tidak memiliki hak yang memadai.

Jadi kontribusi saya adalah untuk semua orang yang mencoba menginstal IBM Integration Toolkit dari bundel Bus Integrasi IBM.

Ketika Anda mencoba menjalankan perintah "Manajer Instalasi" dari folder / Integration_Toolkit / IM_Linux (file yang akan dijalankan adalah "install"), Anda mendapatkan kesalahan yang ditunjukkan pada posting ini.

Instruksi lebih lanjut untuk memperbaiki masalah ini Anda akan temukan di halaman web IBM ini: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Semoga ini bisa membantu siapa saja yang mencoba menginstalnya.

mmarquezvacas
sumber
0

sudo yum instal fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc ++. so.6

Nithin
sumber
0

Saya akan menambahkan untuk Debian Anda memerlukan setidaknya satu kompiler dalam sistem (menurut Debian Stretch dan Jessie 32-bit libraries ).

Saya menginstal apt-get install -y gcc-multilibuntuk menjalankan file executable 32-bit dalam wadah buruh pelabuhan saya berdasarkan debian: jessie.

Vitaliy
sumber
harap sertakan bagian-bagian penting tautan dalam jawaban Anda
Ibo
0

Anda juga dapat menginstal OpenJDK 32-bit ( .i686). Menurut pengujian saya, itu akan diinstal dan berfungsi tanpa masalah.

sudo yum install java-1.8.0-openjdk.i686

catatan:

Paket java-1.8.0-openjdk hanya berisi Java Runtime Environment . Jika Anda ingin mengembangkan program Java maka instal paket java-1.8.0-openjdk-devel .

Lihat di sini untuk detail lebih lanjut.

Mir-Ismaili
sumber