# /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在这两种情况下都有。 怎么来的?
试试:#emerge emul-linux-x86-baselibs,它会提供32位的libz.so.1 …如果这个失败,请尝试ldd / path / to / aapt并提供输出,以及你的ldconfig的输出-v | grep libz
它看起来像SDK aapt工具是一个32位的二进制文件,所以它正在寻找32位版本的libz库,但只find64位。 你可以用ldd来检查。 我相信,如果你安装了emul-linux-x86-baselibs软件包,它会给你正确的/usr/lib32库。
我已经看过dev-util / android-sdk,结果是把app-emulation / emul-linux-x86-gtklibs当作依赖项。
错误确实在emul-linux的32位libz.so.1.2.3中!
我刚刚build立了一个32位的libz版本,它的工作原理 – aapt不会抛出上述错误。 如果你使用的是gentoo – emul-linux-x86-baselibs的所有libz版本都有这个问题(目前是20100915-r1和20110129)
这里是你需要的步骤,直到更新版本的emul-linux-baselibs出来:
--- configure.old 2011-02-25 03:03:37.739491008 +0100
+++ configure 2011-02-25 03:03:51.760491008 +0100
@@ -105,8 +105,8 @@
如果testing“$ 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”
如果testing$ build64 -eq 1; 然后
CFLAGS =“$ {CFLAGS} -m64”
SFLAGS =“$ {SFLAGS} -m64”
问题是,你自己编译的64位版本在ELF头文件中有以下字段:
[5] .gnu.version VERSYM 00000000000017be 000017be [6] .gnu.version_d VERDEF 0000000000001890 00001890 [7] .gnu.version_r VERNEED 00000000000019e8 000019e8
当前emul-linux-x86-baselibs提供的32位版本缺lessVERDEF字段,它只包含
[4] .gnu.version VERSYM 00000d9c 000d9c 0000b4 02 A 2 0 2 [5] .gnu.version_r VERNEED 00000e50 000e50 000050 00 A 3 1 4
你可以检查你自己的32位库的自定义版本是否有VERDEF字段 – 我的问题是,我想知道为什么在emul-linux发行版中缺less它。
问候,cmuelle8
PS:有时计算机程序打印的错误信息是正确的..