# /opt/dev/android-sdk/platforms/android-1.5/tools/aapt
/opt/dev/android-sdk/platforms/android-1.5/tools/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
在 i386 机器上,此 aapt 可以启动,但在 amd64 上却无法启动。两种情况下都存在 /lib/libz.so.1。这是怎么回事?
答案1
SDK aapt 工具似乎是 32 位二进制文件,因此它正在寻找 libz 库的 32 位版本,但只找到 64 位版本。您可以使用 进行检查ldd
。我相信如果您安装 emul-linux-x86-baselibs 包,它会在 中为您提供正确的库/usr/lib32
。
答案2
我查看了 dev-util/android-sdk 并发现它将 app-emulation/emul-linux-x86-gtklibs 作为依赖项。
答案3
只需尝试:# emerge emul-linux-x86-baselibs,它将提供 32 位 libz.so.1 ...如果失败,请尝试 ldd /path/to/aapt 并提供输出,以及 ldconfig -v | grep libz 的输出
答案4
该错误确实存在于 emul-linux 的 32 位 libz.so.1.2.3 中!
我刚刚自己构建了一个 32 位 libz 版本,它可以工作 - aapt 不会抛出上述错误。如果您使用的是 gentoo - emul-linux-x86-baselibs 的所有 libz 版本都有这个问题(目前是 20100915-r1 和 20110129)
在 emul-linux-baselibs 更新版本发布之前,您需要执行以下步骤:
- 获取 zlib(1.2.5 即可)
- 解包
- 编辑配置
--- 配置.旧 2011-02-25 03:03:37.739491008 +0100 +++配置 2011-02-25 03:03:51.760491008 +0100 @@ -105,8 +105,8 @@ 如果测试“$gcc”-eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; 然后 CC="$cc" -SFLAGS="${CFLAGS--O3} -fPIC" -CFLAGS="${CFLAGS--O3}" + SFLAGS="${CFLAGS--O3}-fPIC-m32" + CFLAGS="${CFLAGS--O3} -m32" 如果测试 $build64 -eq 1; 那么 CFLAGS="${CFLAGS} -m64" SFLAGS="${SFLAGS} -m64"
- 制作
- 将 libz.so.1.2.5 移动到 /lib32
问题是,您自己编译的 64 位版本在 ELF 头中有以下字段:
[ 5].gnu.版本 VERSYM 00000000000017be 000017be [ 6].gnu.version_d VERDEF 0000000000001890 00001890 [ 7].gnu.version_r VERNEED 00000000000019e8 000019e8
当前 emul-linux-x86-baselibs 提供的 32 位版本缺少 VERDEF 字段,它仅包含
[ 4].gnu.版本 VERSYM 00000d9c 000d9c 0000b4 02 A 2 0 2 [ 5].gnu.version_r VERNEED 00000e50 000e50 000050 00 A 3 1 4
你可以自己检查一下你定制的 32 位 lib 版本是否有 VERDEF 字段 - 我的有,但我想知道为什么它在 emul-linux 发行版中缺失了。
问候,cmuelle8
ps:有时候电脑程序打印的错误信息是正确的。