如何在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位应用程序?


Answers:


186

到64位的多架构的Ubuntu系统上运行32位可执行文件,你必须添加i386的建筑和安装三个库软件包libc6:i386libncurses5:i386以及libstdc++6:i386

sudo dpkg --add-architecture i386

或者,如果您使用的是Ubuntu 12.04 LTS(精确的穿山甲)或更低版本,请使用以下命令:

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二进制文件。
阿维纳什·拉吉

1
为了能够在Ubuntu 14.04上使用aapt,我也必须安装lib32z1,但是注意到它插入了libc6-i386(区分,注意连字符,而不是冒号)。
克里斯·贝蒂

我做了你的脚步,libc6:i386libncurses5:i386libstdc++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将向您显示缺少哪些库。只需使用apt将这些库安装在i386 arch中。像这样:apt-get install libmissing:i386 当心,一些错误的程序包将尝试删除64位版本的fir。


谢谢,这将解释奇怪的错误消息。首先,我很困惑,为什么bash会给我这个错误(而不是某些错误更明显地来自丢失库的子进程),但是现在我想bash只是看到exec(3)返回ENOENT并将其打印出来。
Thomas Stuefe 2014年

5

如果您想使用“ adb”,则可以使用一个软件包:

sudo apt-get install android-tools-adb

关于32位库-仅:

sudo apt-add-architecture i386

足够了。


感谢您的提示,但我想使用从google下载的android工具,而不是Ubuntu仓库中的工具。我也不确定该软件包的完整性。
Thomas Stuefe 2014年

Ubuntu存储库必须具有新版本。该软件包仅包含adb。如果您需要fastboot,也可以使用它来打包:)
aastefanov 2014年

3

除了Zanna和Avinash Raj的出色回答外,我还必须安装gcc-multilib:

sudo apt-get install gcc-multilib

可能是因为我想在64位上运行旧版gcc版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.