![如何在 64 位 Ubuntu 中运行 32 位应用程序?](https://linux22.com/image/972953/%E5%A6%82%E4%BD%95%E5%9C%A8%2064%20%E4%BD%8D%20Ubuntu%20%E4%B8%AD%E8%BF%90%E8%A1%8C%2032%20%E4%BD%8D%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我安装了 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: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
答案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,这可能是因为该包已被淘汰。不确定为什么这个特定的库很重要。