Запуск aapt на 64-битной Ubuntu 12.04: ошибка при загрузке общих библиотек: libc++.so: нет такого файла или каталога

Я скачал проект Android с открытым исходным кодом и построил его на Linux (64-разрядная версия Ubuntu 12.04), следуя приведенным здесь инструкциям:

http://source.android.com/source/building.html

Я могу заставить его построить без проблем. Когда сборка завершена, меня интересуют инструменты сборки, особенно aapt. Когда я запускаю его, я вижу это:

awt@aosp-build:/aosp/out/host/linux-x86/sdk/sdk/android-sdk_eng.awt_linux-x86/build-tools/android-5.0.50.50.50.50$ ./aapt
./aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file or directory

Итак, это странно. Особенно если учесть, что libc++.so находится тут же, в той же директории:

awt@aosp-build:/aosp/out/host/linux-x86/sdk/sdk/android-sdk_eng.awt_linux-x86/build-tools/android-5.0.50.50.50.50$ ls -l

-rwxrwxr-x 1 awt awt 1118633 Feb  4 19:42 aapt
-rwxrwxr-x 1 awt awt 1261036 Feb  4 19:42 libc++.so

$ file aapt
aapt: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, not stripped
$ file libc++.so 
libc++.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

Я собирал и использовал более старые версии инструментов для сборки Android, последней была версия 4.3. Чтобы запустить его, мне понадобилось:

$ sudo apt-get install ia32-libs

Это позволило мне запустить его, и это сработало. С последней версией Android этого уже недостаточно. Я все еще получаю libc++.so: cannot open shared object file message.

В каталоге out есть и другие промежуточные версии aapt. Например, этот:

$ file /aosp/out/host/linux-x86/bin/aapt aapt: 32-битный общий объект ELF LSB, Intel 80386, версия 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU/Linux 2.6.24 , без разделов $ ls -l /aosp/out/host/linux-x86/bin/aapt -rwxrwxr-x 1 awt awt 6978260 4 февраля 17:50 aapt

Этот бежит. Он еще не удален, поэтому общие библиотеки все еще встроены в него. Если я раздену его:

$ strip -s aapt
$ ./aapt
./aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file or directory

Затем мы возвращаемся к тому, с чего начали. Что я могу сделать, чтобы урезанная версия работала так, как раньше?


person AWT    schedule 05.02.2015    source источник


Ответы (1)


Это старый вопрос, но недавнее голосование по нему напомнило мне, что у меня есть решение.

Ответ заключается в добавлении местоположения libc++.so к текущему LD_LIBRARY_PATH:

$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/path/to/libc++.so
$ ./aapt -version
Android Asset Packaging Tool

Usage:
   aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.
person AWT    schedule 09.06.2016