Загрузка общих библиотек с зависимостями на Android - PullRequest
4 голосов
/ 30 августа 2011

Я портирую большой кусок нативного кода с несколькими взаимозависимыми библиотеками. Загрузка кода завершается неудачно, поскольку компоновщик Android ищет зависимости только в /system/lib/, а не в каталоге установки приложения по адресу /data/data/com.packagename.nnn/lib.

В качестве первого обходного пути я загрузил все .so из Java с помощью System.load () в правильном порядке зависимости . Это решение мне не подходит в основном потому, что набор библиотек меняется от сборки к сборке из-за архитектуры плагинов. Кроме того, пользовательский интерфейс не должен знать так много о родных библиотеках.

Я обнаружил, что Android не поддерживает RPATH или настройку LD_LIBRARY_PATH для приложения. Единственный обходной путь, который я нашел, - это создание библиотек с полностью квалифицированными SONAME.

Однако некоторые зависимости поставляются предварительно созданными.

  1. Возможно ли скомпилировать полностью определенный тег NEEDED в мою собственную библиотеку, даже если необходимый .so не имеет полностью определенного SONAME?

  2. Или можно изменить существующий .so и заменить его SONAME или NEEDED полностью квалифицированным без перекомпиляции?

1 Ответ

0 голосов
/ 02 сентября 2011

Mozilla Fennec загружает несколько общих объектов из пользовательского каталога кэша в их / data / data / package /, вы можете взглянуть на их источник.

...