Механизм разрешения символов общей библиотеки Android

С помощью этого метода Как определить, какой родной общие библиотеки загружаются приложением Android

Я обнаружил, что в загруженном общем ресурсе Libras в приложении для Android есть несколько повторяющихся имен библиотек, например:

/system/lib64/libhwbinder.so
/system/lib64/vndk-sp-28/libhwbinder.so

с использованием

nm -D libname

вывод для дублированных библиотек точно такой же.

Каков механизм принятия решения о том, какие символы использовать между дублированными символами общей библиотеки? Предпочтительны ответы об Android, так как механизм может отличаться от Linux.


person jw_    schedule 03.12.2019    source источник


Ответы (1)


Причиной этого является VNDK https://source.android.com/devices/architecture/vndk/, а механизм — это пространство имен, например:

Динамический компоновщик решает две проблемы проектирования Treble VNDK: общие библиотеки SP-HAL и их зависимости, включая библиотеки VNDK-SP, загружаются в процессы платформы. Должны быть какие-то механизмы для предотвращения конфликтов символов.

С другой стороны, механизм пространства имен компоновщика обеспечивает гибкость, так что некоторые общие библиотеки могут быть экспортированы пространством имен компоновщика и использоваться другим пространством имен компоновщика. Эти экспортированные разделяемые библиотеки могут стать интерфейсами прикладного программирования, общедоступными для других программ, при этом скрывая детали своей реализации в своих пространствах имен компоновщика.

https://source.android.com/devices/architecture/vndk/linker-namespace.html

person jw_    schedule 04.12.2019