Как включить отладочный вывод в динамическом компоновщике на Android? - PullRequest
4 голосов
/ 24 августа 2011

Backgroud:

Мое приложение не запускается на этапе соединения и получает следующее сообщение:

link_image [1995] ... lib1.so
не может связать исполняемый файл

Приложение зависит от нескольких динамических библиотек следующим образом:

приложению нужны lib1, lib1 dlopen lib2, а в lib1 имеется приложение, экспортируемое приложением (глобальная переменная).

Я протестировал lib2 с простой программой, которая в порядке. Поэтому я думаю, что ошибка из-за lib1 на этапе соединения . (Могу пообещать, что все остальные библиотеки, которые нужны приложению, находятся в текущем каталоге, а "./" был добавлен в LD_LIBRARY_PATH. Я также попытался поставить все библиотеки в / system / lib)

Вопрос:

  1. Как включить вывод отладчика компоновщика для получения подробного сообщения об ошибке?
  2. Любое другое предложение?

edit1: после еще одного теста кажется, что ошибка ссылки связана с глобальным символом, на который ссылается lib1, который определен в main.c

Нужны ли в Android дополнительные флаги сборки для включения эталонной глобальной переменной в main?

1 Ответ

1 голос
/ 25 июля 2013

Вы должны перекомпилировать.Возьмите соответствующий источник (ответвление, тег) здесь:

https://github.com/android/platform_bionic/tree/master/linker

В Android.mk вы хотите установить значение 1:

# Set LINKER_DEBUG to either 1 or 0
#
LOCAL_CFLAGS += -DLINKER_DEBUG=0

Если выхотите идти ниже, проверьте TRACE () и DL_ERR ().Как вы увидите, TRACE () определяется препроцессором и таким образом компилируется.В противном случае вы могли бы быстро установить собственное значение для debug_verbosity или его проверок.

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