# /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:
--- 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"
Проблема в том, что в 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: иногда сообщения об ошибках, выводимые компьютерными программами, верны.