APK: проблемы с именами собственных библиотек, связанные с номером версии (SO.XY) - PullRequest
0 голосов
/ 15 ноября 2018

Issue

Встроенный APK выглядит неправильно и не позволяет моему приложению загрузить собственную библиотеку, поскольку он не может найти зависимость при вызове dlopen(): dlopen failed: library "libboost_filesystem.so.1.68.0" not found.

jniLibs content

Каталог

My jniLibs для целевой платформы содержит следующие файлы:

  • libboost_filesystem.so.1.68.0 - это "настоящий" общий объект.
  • libboost_filesystem.so - этосимволическая ссылка на libboost_filesystem.so.1.68.0

Содержимое APK

После сборки APK содержит libboost_filesystem.so, который теперь является двоичным объектом (не символическая ссылка).Похоже, система сборки Android следовала по символической ссылке, захватила содержимое файла, на который указывает ссылка, но вместо этого использовала имя символической ссылки.

Я попытался удалить символическую ссылку из папки jniLibs,но при этом создается впечатление, что файлы xxx.so.VERSION затем игнорируются.

Вопрос

Как я могу встроить свой общий объект "полное имя" в jniLibs без проблем с системой сборки Androidс этим ?

1 Ответ

0 голосов
/ 15 ноября 2018

Нет, ты не можешь. Вам следует избегать создания версий файла so. См. https://stackoverflow.com/a/45058227/192373 для получения инструкций.

Также вполне естественно, что Android не поддерживает эту технику, потому что ваши нативные библиотеки принадлежат вашему APK и не может возникнуть конфликт версий.

Рассмотрите возможность статического связывания файловой системы boost, чтобы избежать дополнительного поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...