2016-10-20 4 views
0

Я строю библиотеки для Android, используя NDK (r11b) для armeabi-v7a, и я нашел разные версии libgnustl_shared.so и не могу понять почему.Откуда берутся libgnustl_shared.so? Почему это размер отличается после того, как я построил?

  • В папке NDK (в андроид-NDK-R11b \ Sources \ CXX-СТЛ \ гну-libstdC++ \ 4.9 \ ЛИЭС \ armeabi-v7a \ libgnustl_shared.so) его размер 5593ko.
  • После того, как я построил свой проект (кучу библиотек), используя ndk-build.cmd, размер файла библиотеки (в libs \ armeabi-v7a \ libgnustl_shared.so) равен 694ko.
  • После того, как я построил свой проект (кучу библиотек) с помощью QtCreator, библиотека (в файле android-build \ libs \ armeabi-v7a \ libgnustl_shared.so) размером 846ko. Обратите внимание, что библиотека, упакованная в apk (в android-build \ bin), имеет тот же размер. Следует также отметить, что отчет журнала QtCreator сборки он взял файл из (андроид-NDK-R11b/источники/CXX-СТЛ/Гну-libstdC++/4.9/Libs/armeabi-v7a/libgnustl_shared.so)

Main вопрос: Почему файл после компиляции меньше исходного? Устраняет ли компоновщик/компилятор файл в какой-то момент (удаление неиспользуемых символов)?

Бонус вопрос: я, наконец, построить свой проект с QtCreator (в конечном итоге с libgnustl_shared.so из 846ko) и дать мои файлы так (но libgnustl_shared.so) к кому-то, кто будет интегрировать его в свою собственную заявление. После того, как он развернул свое приложение, его IDE (студия Android, я полагаю) разворачивает его с помощью libgnustl_shared.so 694ko, а мой код начинает сбой в операциях STL. Могут ли эти сбои быть вызваны несоответствием с libgnustl_shared.so? Как мы должны это исправить? (поскольку QtCreator не позволяет мне создавать статическую версию libgnustl_shared.so, какую версию мы должны использовать в конце для развертывания?)

Обратите внимание, что мой проект скомпилирован с QtCreator, но не использует Qt (я использую Qt для тестирование моих библиотек из графического интерфейса, но сами библиотеки не используют Qt вообще).

ответ

4

Почему файл после компиляции меньше исходного? Устраняет ли компоновщик/компилятор файл в какой-то момент (удаление неиспользуемых символов)?

Да, общие библиотеки удаляются после установки в каталог библиотеки. Библиотеки в NDK не подвергаются предварительному удалению, поскольку это предотвратит отладку пользователей.

Обратите внимание, что для r11 и более ранних существует две библиотеки armeabi-v7a. Тот, который вы указали, и другой в поддиректории «большой палец». Фактически был использован только большой палец (поэтому исключение большого пальца было удалено в r12).

Могут ли эти аварии возникнуть из-за несоответствия с использованием libgnustl_shared.so?

Если они разные версии libgnustl_shared.so (не из той же версии NDK), то да, абсолютно. Если они оба из r11 и оба являются armeabi-v7a (большой или не большой), они должны быть совместимы. Если используется версия armeabi-v7a-hard библиотеки (удалена в r12), то это определенно проблема.armeabi-v7a, смешанный с armeabi, немного менее определен, но может быть проблемой.

+0

Thanx для вашей помощи. Вы говорите: «Если они оба из r11 и оба являются armeabi-v7a, тогда они должны быть совместимы», но если мы используем один лишенный до 694ko, тогда как QtCreator упаковал один разделившийся на 846ko .... возможно, тот, который отсутствует у 694ko некоторые символы, необходимые моему коду .... нет? Это сделало бы их несовместимыми ... Было бы безопасно использовать оригинальный файл (из \ android-ndk-r11b/sources/cxx-stl/gnu-libstdC++/4. 9/libs/armeabi-v7a/l ibgnustl_shared.so не лишен) в производстве, чтобы убедиться, что все символы присутствуют? – jpo38

 Смежные вопросы

  • Нет связанных вопросов^_^