如何在 64 位 Ubuntu 中运行 32 位应用程序?

如何在 64 位 Ubuntu 中运行 32 位应用程序?

我安装了 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. 

Android SDK 中所有其他 32 位工具都存在相同症状。

在过去,人们只需在 64 位 Ubuntu 上安装 32 位库即可获得 32 位支持,但这似乎不再起作用了。

如何在 64 位 Ubuntu 发行版上运行 32 位应用程序?

答案1

要在 64 位多架构 Ubuntu 系统上运行 32 位可执行文件,您必须添加架构i386并安装三个库包libc6:i386libncurses5: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

答案2

当您拥有二进制文件但缺少某些库时,可能会出现“没有这样的文件或目录”。如果您安装了build-essential软件包,则可以使用ldd命令。此命令ldd ./adb | grep not将显示缺少哪些库。只需使用 apt 在 i386 架构中安装这些库即可。如下所示:apt-get install libmissing:i386 请注意,一些有缺陷的软件包会尝试首先删除 64 位版本。

答案3

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

sudo apt-get install gcc-multilib

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

答案4

只是对 Zanna 的补充:
以下内容解决了“无法安装库”的 Android Studio 问题:

sudo apt-get install libdb1-compact tzdata initscripts

这替换了缺失的库 libstdc++6-i386,这可能是因为该包已被淘汰。不确定为什么这个特定的库很重要。

相关内容