วิธีรันแอพ 32 บิตใน Ubuntu 64- บิต


132

ฉันติดตั้ง Ubuntu 14.04 และ SDK สำหรับการพัฒนา Android ปัจจุบันซึ่งมีไฟล์ปฏิบัติการแบบ 32 บิต ฉันพบว่าฉันไม่สามารถรันไบนารี 32 บิตเหล่านั้นได้ พยายามที่จะเริ่มต้นพวกเขาจากการทุบตีทำให้ฉันมีข้อผิดพลาด:

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

มันอยู่ที่นั่นแม้ว่า:

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

ในสมัยก่อนเราสามารถติดตั้งไลบรารี่แบบ 32- บิตบน Ubuntu แบบ 64- บิตเพื่อรับการสนับสนุนแบบ 32 บิต แต่ดูเหมือนจะไม่ทำงานอีกต่อไป

ฉันจะรันแอพ 32 บิตบน Ubuntu 14- บิต 64 บิตได้อย่างไร


คำตอบ:


186

เมื่อต้องการเรียกใช้แฟ้มที่ปฏิบัติการ 32 บิตบนหลายสถาปัตยกรรมระบบ Ubuntu 64 บิตคุณต้องเพิ่มi386สถาปัตยกรรมและการติดตั้งแพคเกจสามห้องสมุดlibc6:i386, libncurses5:i386และlibstdc++6:i386:

sudo dpkg --add-architecture i386

หรือถ้าคุณใช้ Ubuntu 12.04 LTS (Precise Pangolin) หรือต่ำกว่าใช้สิ่งนี้:

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

แล้ว:

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

หากล้มเหลวให้ทำเช่นกัน

sudo apt-get install multiarch-support

หลังจากขั้นตอนเหล่านี้คุณควรจะสามารถเรียกใช้แอปพลิเคชัน 32 บิต:

./example32bitprogram

@AvinashRaj สิ่งนี้ช่วยฉันออกไป! อย่างไรก็ตามคำสั่งสุดท้าย "sudo ./adb" ควรทำอะไรจริง?
Marcel

1
มันรันไฟล์ไบนารี adb 32 บิตซึ่งมีอยู่ในไดเรกทอรีปัจจุบัน
Avinash Raj

1
เพื่อให้ aapt ทำงานกับ Ubuntu 14.04 ได้ฉันก็ต้องติดตั้งlib32z1เช่นกัน แต่สังเกตว่ามันดึงมาใน libc6-i386 (ความแตกต่างสังเกตเห็นเครื่องหมายยัติภังค์ไม่ใช่เครื่องหมายโคลอน)
Chris Betti

ฉันทำตามขั้นตอนของคุณlibc6:i386แล้วlibncurses5:i386, libstdc++6:i386เป็นรุ่นใหม่ล่าสุดและตั้งค่าเป็นติดตั้งด้วยตนเอง แต่หลังจากนั้นมันก็บอกว่า: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." และการlibstdc++6-4.4-dev:i386พึ่งพาที่g++-4.4:i386ไม่แน่นอน: ขึ้นอยู่กับ(จะไม่ถูกติดตั้ง) ความขัดแย้ง: libstdc++6-4.4-dbg:i386... และความขัดแย้งอื่น ๆ เกี่ยวกับlibstdc++6-4.4/6/7ฯลฯ มีอะไรผิดปกติหรือฉันควรทิ้งมันไว้เหมือนตอนนี้?
Fredrick Gauss

@ FredrickGauss มาที่นี่แล้ว
Avinash Raj

9

"ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" อาจปรากฏขึ้นเมื่อคุณมีไบนารี่ แต่ไม่มีไลบรารี่บางตัว หากคุณติดตั้งbuild-essentialแพ็คเกจคุณจะมีlddคำสั่งให้ใช้งาน คำสั่งนี้ldd ./adb | grep notจะแสดงให้คุณเห็นว่าห้องสมุดใดขาดหายไป เพียงติดตั้งไลบรารีเหล่านี้ใน i386 arch ด้วย apt เช่นนี้: apt-get install libmissing:i386 ระวังแพ็คเกจ buggy บางตัวจะพยายามลบรุ่น 64 บิต


ขอบคุณที่จะอธิบายข้อความผิดพลาดแปลก ๆ ฉันสับสนครั้งแรกว่าทำไมทุบตีจะทำให้ฉันมีข้อผิดพลาดนี้ (แทนที่จะเกิดข้อผิดพลาดบางอย่างชัดเจนมากขึ้นจากกระบวนการเด็กที่คิดถึงห้องสมุด) แต่ตอนนี้ฉันเดาว่าทุบตีแค่เห็น exec (3) คืน ENOENT และพิมพ์ออกมา
Thomas Stuefe

5

และถ้าคุณต้องการใช้ "adb" มีแพ็คเกจให้:

sudo apt-get install android-tools-adb

และไลบรารี 32- บิต - เท่านั้น:

sudo apt-add-architecture i386

จะเพียงพอ


ขอบคุณสำหรับเคล็ดลับ แต่ฉันต้องการใช้เครื่องมือ android ที่ดาวน์โหลดจาก google ไม่ใช่เครื่องมือใน repos ของ Ubuntu ฉันไม่แน่ใจเกี่ยวกับความสมบูรณ์ของแพ็คเกจ
โทมัส Stuefe

ที่เก็บ Ubuntu ต้องมีเวอร์ชันใหม่ แพคเกจประกอบด้วย adb เท่านั้น หากคุณต้องการ fastboot - มีแพคเกจให้มันมากเกินไป :)
aastefanov

3

นอกจากนี้เพื่อคำตอบที่ยอดเยี่ยมของ Zanna และ Avinash Raj ฉันต้องติดตั้ง gcc-multilib เช่นกัน:

sudo apt-get install gcc-multilib

อาจเป็นเพราะฉันต้องการเรียกใช้ gcc รุ่นเก่าบน 64 บิต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.