如何在64位Fedora 17上运行32位程序?

虽然Android开发工具(ADT)软件包可以作为“Linux 64 Bit”的zip包使用,但是states following requirements

64-bit distributions must be capable of running 32-bit applications.

事实上,只是在Fedora 17 64位系统上运行打包的eclipse会导致错误,因为它无法“找到”几个开发工具,例如adb或aapt:

Error executing aapt: Cannot run program “/home/juser/local/adt-bundle-linux/sdk/platform-tools/aapt”: error=2, No such file or directory: error=2, No such file or directory

‘没有这样的文件’是误导性的,因为它在那里(在$HOME / local下):

adt-bundle-linux/sdk/platform-tools/aapt

但我不能在shell上执行它:

~/local $./adt-bundle-linux/sdk/platform-tools/aapt 
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt

看着文件

$file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
 not stripped

我们看到它是一个32二进制文件.而且我的系统(目前)似乎无法运行32位应用程序.

我该如何改变?如何使当前的Fedora 64位系统能够运行32位应用程序?

(当然有人也可能会问为什么有人会把32位二进制文​​件放到一个名为’Linux 64 bit’的二进制包中……)

解决方法:

关于eclipse无法找到adb等,这是因为如果没有在系统上运行它们所需的32位共享库,它们就不可执行.

关于32位库,情况相当简单:您只需要安装适当的32位库.在这里的64位fedora 17安装中,主要的64位库位于/usr/lib64中,可选的32位库位于/usr/lib中.所以,如果我在sdk / platform-tools / adb上调用ldd:

linux-gate.so.1 =>  (0xf7791000)
librt.so.1 => /lib/librt.so.1 (0xf776c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7747000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf772d000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xf7644000)
libm.so.6 => /lib/libm.so.6 (0xf7618000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf75fb000)
libc.so.6 => /lib/libc.so.6 (0xf7449000)
/lib/ld-linux.so.2 (0xf7792000)
libdl.so.2 => /lib/libdl.so.2 (0xf7444000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7424000)

请注意,这些都在/ lib中,它是/usr/lib(不是/usr/lib64)的符号链接.看:

»file /lib/libc.so.6
/lib/libc.so.6: symbolic link to `libc-2.15.so'
»file /lib/libc-2.15.so
/lib/libc-2.15.so: ELF 32-bit LSB shared object [...]

一个32位标准C库.你可以做的是通过32位sdk工具检查它们与ldd相关联的内容.我手边没有示例,但如果缺少某些内容,ldd报告的内容如下:

libc.so.6 => ??????

首先,对于ldd工作,你将需要32位glibc附带的32位加载器(没有这个,ldd将它称为非可执行文件,并告诉你什么):

»yum search glibc
glibc.i686 : The GNU libc libraries
glibc.x86_64 : The GNU libc libraries

这是截断的,但x86_64包就是你已经拥有的; i686是32位版本.所以只需安装即可.

你不需要任何’devel’包,因为没有编译.除此之外,有根据的猜测和yum提供/ yum搜索应该有所帮助(查看adb的列表,还有32位版本的C lib,ncurses,pthreads,以及一些我不知道的东西).

关于使用whatprovides的快速提示:

»yum whatprovides libtinfo
No matches found.
»yum whatprovides libtinfo.so.5
[2 matches]
»yum whatprovides "*/libtinfo.so.5"
[4 matches]

上一篇:linux – 为什么Ubuntu建议下载32位版本?


下一篇:[转]Oracle DB管理内存