Ubuntu 64 비트에서 32 비트 앱을 실행하는 방법은 무엇입니까?


132

Ubuntu 14.04와 현재 Android 개발 SDK (32 비트 실행 파일 포함)를 설치했습니다. 32 비트 바이너리를 실행할 수 없다는 것을 알았습니다. bash에서 시작하려고하면 오류가 발생합니다.

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

예전에는 64 비트 Ubuntu에 32 비트 라이브러리를 설치하여 32 비트를 지원했지만 더 이상 작동하지 않는 것 같습니다.

64 비트 Ubuntu 14.04에서 32 비트 앱을 어떻게 실행합니까?


답변:


186

64 비트 멀티 아키텍처 우분투 시스템에 32 비트 실행 파일을 실행하려면 추가해야 i386아키텍처를하고 3 개 개의 라이브러리 패키지를 설치 libc6:i386, libncurses5:i386libstdc++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
현재 디렉토리에 있던 32 비트 adb 이진 파일을 실행합니다.
Avinash Raj

1
우분투 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은 누락 된 라이브러리를 보여줍니다. 이 라이브러리를 a386으로 i386 arch에 설치하십시오. 다음과 같이 : apt-get install libmissing:i386 일부 버그가있는 패키지는 64 비트 버전 전나무를 삭제하려고 시도합니다.


이상한 오류 메시지를 설명해 주셔서 감사합니다. bash가 왜이 오류 (라이브러리를 놓친 자식 프로세스에서 더 명확하게 오는 오류 대신)가 발생하는지 혼란 스럽지만 이제는 bash가 exec (3)가 ENOENT를 반환하고 이것을 인쇄한다고 생각합니다.
Thomas Stuefe

5

"adb"를 사용하려면 패키지가 있습니다 :

sudo apt-get install android-tools-adb

그리고 약 32 비트 라이브러리-

sudo apt-add-architecture i386

충분할 것입니다.


팁 주셔서 감사하지만 우분투 저장소의 도구가 아닌 Google에서 다운로드 한 Android 도구를 사용하고 싶었습니다. 또한 해당 패키지의 완전성에 대해 잘 모르겠습니다.
Thomas Stuefe

우분투 리포지토리에는 새 버전이 있어야합니다. 패키지에는 adb 만 포함되어 있습니다. fastboot를 원한다면 패키지도있다 :)
aastefanov

3

또한 Zanna와 Avinash Raj의 탁월한 답변에 gcc-multilib도 설치해야했습니다.

sudo apt-get install gcc-multilib

아마도 64 비트에서 이전 gcc 버전을 실행하고 싶었 기 때문일 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.