Причины UnsatisfiedLinkError dlopen не удалось: не удается найти символ - PullRequest
0 голосов
/ 09 июля 2019

В моем apk есть две общие библиотеки с именами libX.so и libY.so . libX.so нужна особая функция с именем ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev , которая определена в libY.so .Поэтому мы связываем libX.so с libY.so при сборке.

Мое приложение сначала загружает libY.so , а затем загружает libX.so с использованием System.loadLibrary (). libY.so загружен правильно.Но при загрузке libX.so происходит сбой приложения со следующей ошибкой

java.lang.UnsatisfiedLinkError: сбой dlopen: не удается найти символ "ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traits

Чтобы устранить проблему, я проверил следующий

  1. "nm libY.so" -> Показывает символ ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev
  2. вызываемый dlsym (RTLD_DEFAULT, ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev ) сразу после загрузки libX.so.dlsym возвращает ненулевое возвращаемое значение, которое означает, что символ загружен.Все еще происходит сбой приложения с той же ошибкой.

Даже после отладки в течение 2 дней, я не мог понять, что идет не так.

Может кто-нибудь сказать, если есть какие-либо другиевозможные причины, приводящие к этой проблеме.

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

Спасибо

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