在 amd64 机器上找不到共享库

在 amd64 机器上找不到共享库
# /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:有时候电脑程序打印的错误信息是正确的。

相关内容