虽然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]