Làm cách nào để chạy ứng dụng 32 bit trong Ubuntu 64 bit?


132

Tôi đã cài đặt Ubuntu 14.04 và SDK phát triển Android hiện tại, có chứa các tệp thực thi 32 bit. Tôi thấy rằng tôi không thể chạy các nhị phân 32 bit đó. Cố gắng bắt đầu chúng từ bash cho tôi một lỗi:

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

Nó ở đó mặc dù:

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

Vào thời xa xưa, người ta chỉ có thể cài đặt các thư viện 32 bit trên Ubuntu 64 bit để được hỗ trợ 32 bit, nhưng điều đó dường như không còn hoạt động nữa.

Làm cách nào để chạy ứng dụng 32 bit trên Ubuntu 14.04 64 bit?


Câu trả lời:


186

Để chạy một tập tin thực thi 32-bit trên đa kiến trúc hệ thống Ubuntu 64-bit, bạn phải bổ sung các i386kiến trúc và cài đặt ba gói thư viện libc6:i386, libncurses5:i386libstdc++6:i386:

sudo dpkg --add-architecture i386

Hoặc nếu bạn đang sử dụng Ubuntu 12.04 LTS (Pangolin chính xác) hoặc thấp hơn, hãy sử dụng:

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

Sau đó:

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

Nếu thất bại, cũng làm

sudo apt-get install multiarch-support

Sau các bước này, bạn sẽ có thể chạy ứng dụng 32 bit:

./example32bitprogram

@AvinashRaj Điều này đã giúp tôi ra ngoài! Tuy nhiên, lệnh cuối cùng "sudo ./adb" được cho là thực sự là gì?
Marcel

1
Nó thực thi tệp nhị phân adb 32 bit có trong thư mục hiện tại.
Avinash Raj

1
để có được aapt hoạt động trên Ubuntu 14.04, tôi cũng phải cài đặt lib32z1, nhưng nhận thấy nó được kéo vào libc6-i386 (phân biệt, chú ý dấu gạch nối, không phải dấu hai chấm).
Chris Betti

Tôi đã làm các bước của bạn, libc6:i386, libncurses5:i386, libstdc++6:i386là phiên bản mới nhất và thiết lập để cài đặt bằng tay. Nhưng sau đó nó nói: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." và các libstdc++6-4.4-dev:i386phụ thuộc chưa được đáp ứng: phụ thuộc g++-4.4:i386(sẽ không được cài đặt). xung đột: libstdc++6-4.4-dbg:i386... và các xung đột khác về libstdc++6-4.4/6/7vv Điều gì là sai hoặc tôi nên để nó như bây giờ?
Fredrick Gauss

@FredrickGauss vào đây .
Avinash Raj

9

"Không có tệp hoặc thư mục như vậy" có thể xuất hiện khi bạn có tệp nhị phân của mình, nhưng nó thiếu một số thư viện. Nếu bạn cài đặt build-essentialgói, bạn sẽ có lddsẵn lệnh. Lệnh ldd ./adb | grep notnày sẽ cho bạn thấy những thư viện đang thiếu. Chỉ cần cài đặt các thư viện này trong i386 arch với apt. Giống như thế này: apt-get install libmissing:i386 Hãy coi chừng, một số gói lỗi sẽ cố gắng xóa các phiên bản 64 bit.


Cảm ơn bạn, điều đó sẽ giải thích thông báo lỗi kỳ lạ. Trước tiên tôi đã nhầm lẫn tại sao bash sẽ cho tôi lỗi này (thay vì một số lỗi rõ ràng hơn từ quy trình con mà bỏ qua các thư viện), nhưng bây giờ tôi đoán bash chỉ thấy exec (3) trả lại ENOENT và in nó ra.
Thomas Stuefe

5

Và nếu bạn muốn sử dụng "adb", có một gói cho nó:

sudo apt-get install android-tools-adb

Và khoảng thư viện 32 bit - chỉ:

sudo apt-add-architecture i386

sẽ có đủ.


Cảm ơn về mẹo này, nhưng tôi muốn sử dụng các công cụ Android được tải xuống từ google, không phải các công cụ trong repos Ubuntu. Tôi cũng không chắc chắn về tính đầy đủ của gói đó.
Thomas Stuefe

Kho lưu trữ Ubuntu phải có phiên bản mới. Gói chỉ chứa adb. Nếu bạn muốn fastboot - cũng có gói cho nó :)
aastefanov

3

Ngoài câu trả lời xuất sắc của Zanna và Avinash Raj, tôi cũng phải cài đặt gcc-multilib:

sudo apt-get install gcc-multilib

Có thể điều này là do tôi muốn chạy một phiên bản gcc cũ trên 64 bit.

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.