Bagaimana cara menjalankan aplikasi 32-bit di Ubuntu 64-bit?

132

Saya menginstal Ubuntu 14.04 dan SDK pengembangan Android saat ini, yang berisi file executable 32-bit. Saya menemukan bahwa saya tidak dapat menjalankan binari 32-bit itu. Mencoba memulai dari bash memberi saya kesalahan:

$ ./adb
bash: ./adb: No such file or directory

Itu ada di sana:

$ ls -al ./adb
-rwxrwxrwx 1 thomas thomas 1231255 Jan 17 13:31 ./adb
$ file ./adb
./adb: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped. Same symptom for all the other 32-bit tools in the Android SDK. 

Di masa lalu orang hanya bisa menginstal perpustakaan 32-bit pada 64-bit Ubuntu untuk mendapatkan dukungan 32-bit, tetapi itu tampaknya tidak berfungsi lagi.

Bagaimana cara menjalankan aplikasi 32-bit pada Ubuntu 14.04 64-bit?

Thomas Stuefe
sumber

Jawaban:

186

Untuk menjalankan 32-bit executable file di multi-arsitektur sistem Ubuntu 64-bit, Anda harus menambahkan i386arsitektur dan menginstal tiga paket perpustakaan libc6:i386, libncurses5:i386dan libstdc++6:i386:

sudo dpkg --add-architecture i386

Atau jika Anda menggunakan Ubuntu 12,04 LTS (Precise Pangolin) atau di bawah, gunakan ini:

echo "foreign-architecture i386" > /etc/dpkg/dpkg.cfg.d/multiarch

Kemudian:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

Jika gagal, lakukan juga

sudo apt-get install multiarch-support

Setelah langkah-langkah ini, Anda harus dapat menjalankan aplikasi 32-bit:

./example32bitprogram
Avinash Raj
sumber
@AvinashRaj Ini membantu saya keluar! Namun, apa perintah terakhir "sudo ./adb" yang seharusnya dilakukan?
Marcel
1
Ini mengeksekusi file biner 32bit adb yang ada di direktori saat ini.
Avinash Raj
1
untuk mendapatkan aapt berfungsi pada Ubuntu 14.04, saya harus menginstal lib32z1juga, tetapi memperhatikan itu menarik libc6-i386 (perbedaan, perhatikan tanda hubung, bukan titik dua).
Chris Betti
Saya melakukan langkah-langkah Anda, libc6:i386, libncurses5:i386, libstdc++6:i386adalah versi terbaru dan diatur untuk diinstal secara manual. Tapi setelah itu ia mengatakan: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." dan dependancies terpenuhi: libstdc++6-4.4-dev:i386tergantung g++-4.4:i386(tidak akan diinstal). konflik: libstdc++6-4.4-dbg:i386... dan konflik lain tentang libstdc++6-4.4/6/7dll. Apa yang salah atau haruskah saya biarkan seperti sekarang?
Fredrick Gauss
@FredrickGauss masuk ke sini .
Avinash Raj
9

"Tidak ada file atau direktori seperti itu" mungkin muncul ketika Anda memiliki biner Anda, tetapi tidak memiliki beberapa perpustakaan. Jika Anda menginstal build-essentialpaket, Anda akan memiliki lddperintah yang tersedia. Perintah ini ldd ./adb | grep notakan menunjukkan kepada Anda perpustakaan apa yang hilang. Cukup instal pustaka ini di lengkungan i386 dengan apt. Seperti ini: apt-get install libmissing:i386 Hati-hati, beberapa paket kereta akan mencoba untuk menghapus versi 64bit pertama.

Barafu Albino
sumber
Terima kasih, itu akan menjelaskan pesan kesalahan yang aneh. Saya pertama kali bingung mengapa bash akan memberi saya kesalahan ini (bukannya beberapa kesalahan datang lebih jelas dari proses anak yang merindukan perpustakaan), tapi sekarang saya kira bash hanya melihat exec (3) mengembalikan ENOENT dan mencetak ini.
Thomas Stuefe
5

Dan jika Anda ingin menggunakan "adb" ada paket untuk itu:

sudo apt-get install android-tools-adb

Dan sekitar perpustakaan 32-bit - hanya:

sudo apt-add-architecture i386

akan cukup.

aastefanov
sumber
Terima kasih atas tipnya, tetapi saya ingin menggunakan alat android yang diunduh dari google, bukan yang ada di repo Ubuntu. Saya juga tidak yakin tentang kelengkapan paket itu.
Thomas Stuefe
Repositori Ubuntu harus memiliki versi baru. Paket hanya berisi adb. Jika Anda ingin fastboot - ada paket untuk itu juga :)
aastefanov
3

Selain jawaban Zanna dan Avinash Raj yang sangat bagus saya juga harus menginstal gcc-multilib:

sudo apt-get install gcc-multilib

Mungkin ini karena saya ingin menjalankan versi gcc lama pada 64bit.

pengguna2144067
sumber