32-bit uygulama 64-bit Ubuntu'da nasıl çalıştırılır?


132

Ubuntu 14.04'ü ve 32 bit çalıştırılabilir dosyaları içeren mevcut Android geliştirme SDK'yı kurdum. 32 bitlik ikili dosyaları çalıştıramadığımı öğrendim. Onları bash'dan başlatmaya çalışmak bana bir hata veriyor:

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

Yine de var:

$ 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. 

Eski günlerde, 32-bit destek alabilmek için 64-bit Ubuntu'ya 32-bit kitaplıklar kurulabilir, ancak bu artık işe yaramaz gibi görünmüyor.

64 bit Ubuntu 14.04'te 32 bit uygulamaları nasıl çalıştırabilirim?


Yanıtlar:


186

64-bit çok mimari Ubuntu sisteminde 32 bit yürütülebilir dosya çalıştırmak için, eklemek zorunda i386mimarisi ve üç kütüphane paketleri yüklemek libc6:i386, libncurses5:i386ve libstdc++6:i386:

sudo dpkg --add-architecture i386

Veya, Ubuntu 12.04 LTS (Precise Pangolin) veya daha yenisini kullanıyorsanız, şunu kullanın:

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

Sonra:

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

Başarısız olursa, ayrıca

sudo apt-get install multiarch-support

Bu adımlardan sonra, 32 bit uygulamayı çalıştırabilmelisiniz:

./example32bitprogram

@AvinashRaj Bu bana yardımcı oldu! Ancak, gerçekte yapması gereken son komut "sudo ./adb" nedir?
Marcel,

1
Geçerli dizinde bulunan 32bit adb ikili dosyasını çalıştırır.
Avinash Raj

1
Ubuntu 14.04 üzerinde çalışarak aapt almak için de kurmam gerekti lib32z1, ancak libc6-i386'da (fark, kolonu değil, kısa çizgiyi dikkat edin) çekilmiş olduğunu fark ettim.
Chris Betti

Ben adımlarınızı yaptım libc6:i386, libncurses5:i386, libstdc++6:i386en yeni sürümü ve manuel yüklü olarak ayarlanmıştır. Fakat ondan sonra şunu söylüyor: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." ve karşılanmayan bağımlılıklar: libstdc++6-4.4-dev:i386bağlı g++-4.4:i386(kurulmayacak). Çatışmalar: libstdc++6-4.4-dbg:i386… ve diğer konularla ilgili diğer anlaşmazlıklar libstdc++6-4.4/6/7. Yanlış olan nedir veya şimdi olduğu gibi bırakmalı mıyım?
Fredrick Gauss,

@ FredrickGauss buraya girdi .
Avinash Raj,

9

İkili dosyaya sahip olduğunuzda "böyle bir dosya ya da dizin yok" görünebilir, ancak bazı kitaplıklardan yoksundur. Eğer yüklerseniz build-essentialpaketi, sahip olacaktır lddkomut kullanılabilir. Bu komut ldd ./adb | grep notsize hangi kütüphanelerin eksik olduğunu gösterecektir. Sadece bu kütüphaneleri apt ile i386 arch'a yükleyin. Bunun gibi: apt-get install libmissing:i386 Dikkat edin, bazı paket paketleri 64 bit sürüm köknar'ı silmeye çalışacaktır.


Teşekkürler, bu garip hata mesajını açıklar. Önce bash'ın bana bu hatayı vermesinin neden kafam karıştı (kütüphaneleri özleyen alt süreçten daha net bir şekilde gelmek yerine), ama şimdi sanırım bash sadece ENOENT'i döndüren ve bunu basan exec (3) görüyor.
Thomas Stuefe

5

"Adb" kullanmak istiyorsanız, bunun için bir paket var:

sudo apt-get install android-tools-adb

Ve yaklaşık 32 bit kitaplıklar - yalnızca:

sudo apt-add-architecture i386

yeterli olacak.


Tavsiyen için teşekkürler, ancak Ubuntu depolarındakileri değil, google'dan indirilen android araçlarını kullanmak istedim. Ayrıca o paketin eksiksiz olduğundan da emin değilim.
Thomas Stuefe

Ubuntu depoları yeni sürüme sahip olmalıdır. Paket sadece adb içeriyor. Fastboot istiyorsanız - bunun için de bir paket var :)
aastefanov

3

Ek olarak, Zanna ve Avinash Raj'ın mükemmel cevabına gcc-multilib'i de kurmak zorunda kaldım:

sudo apt-get install gcc-multilib

Muhtemelen bunun nedeni, 64bit’te eski bir gcc sürümünü çalıştırmak istemem.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.