Назад | Перейти на главную страницу

Не удается найти общую библиотеку на машине 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 присутствует в обоих случаях. Как придешь?

Просто попробуйте: # emerge emul-linux-x86-baselibs, он предоставит 32-битный libz.so.1 ... если это не удастся, попробуйте ldd / path / to / aapt и предоставьте вывод, а также вывод вашего ldconfig -v | grep libz

Я посмотрел на dev-util / android-sdk и выяснил, что он тянет app-emulation / emul-linux-x86-gtklibs в качестве зависимости.

Похоже, что инструмент SDK aapt представляет собой 32-разрядный двоичный файл, поэтому он ищет 32-разрядную версию библиотеки libz, но находит только 64-разрядную. Вы можете проверить это с помощью ldd. Я считаю, что если вы установите пакет emul-linux-x86-baselibs, он даст вам правильную библиотеку в /usr/lib32.

ошибка действительно в 32-битной libz.so.1.2.3 emul-linux !!

Я сам только что создал 32-битную версию libz, и она работает - aapt не выдает вышеуказанную ошибку. если вы используете gentoo - эта проблема есть у всех libz-версий emul-linux-x86-baselibs (в настоящее время 20100915-r1 и 20110129)

Вот шаги, которые вам нужны, пока не выйдет обновленная версия emul-linux-baselibs:

  • получить zlib (1.2.5 в порядке)
  • распаковать
  • изменить настроить
--- configure.old       2011-02-25 03:03:37.739491008 +0100
+++ configure   2011-02-25 03:03:51.760491008 +0100
@@ -105,8 +105,8 @@

 if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
   CC="$cc"
-  SFLAGS="${CFLAGS--O3} -fPIC"
-  CFLAGS="${CFLAGS--O3}"
+  SFLAGS="${CFLAGS--O3} -fPIC -m32"
+  CFLAGS="${CFLAGS--O3} -m32"
   if test $build64 -eq 1; then
     CFLAGS="${CFLAGS} -m64"
     SFLAGS="${SFLAGS} -m64"
  • делать
  • переместите libz.so.1.2.5 в / lib32

Проблема в том, что в 64-битной версии, которую вы скомпилируете, есть следующие поля в заголовке ELF:

  [ 5] .gnu.version      VERSYM           00000000000017be  000017be
  [ 6] .gnu.version_d    VERDEF           0000000000001890  00001890
  [ 7] .gnu.version_r    VERNEED          00000000000019e8  000019e8

32-битная версия, предоставляемая текущим emul-linux-x86-baselibs, не имеет поля VERDEF, она содержит только

  [ 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 ..

С уважением, cmuelle8

ps: иногда сообщения об ошибках, выводимые компьютерными программами, верны.