Используя Android NDK и сгенерированными библиотеками (.so
)
Мне нужно получить адрес метода, который присутствует только в основном SO.Использование dlsym()
после dlopen()
предоставит адрес метода, но он будет искать этот метод во всех связанных SO.Но мне нужно получить адрес метода, только если этот метод является частью основного SO, а НЕ, если он является частью любого другого связанного SO.
Например, если я открыл A.so
с использованием dlopen()
и затем вызовите dlsym()
для проверки функции foo()
, используя дескриптор, предоставленный dlopen()
, тогда я должен получить дескриптор, только если он является частью A.so
.в настоящее время dlsym()
предоставляет адрес, даже если foo()
является частью B.so
, который связан с A.so
(мне нужен dlsym()
для поиска только в A.so
, а не в других связанных или зависимых библиотеках),
В Linux, если мы используем dlopen()
с флагом 'RTLD_FIRST
', желаемое поведение может быть достигнуто.Но «RTLD_FIRST
» не поддерживается в Android.Я проверил заголовочный файл 'dlfcn.h
' для макроса 'RTLD_FIRST
' и отсутствует.
Если это полностью невозможно в Android-NDK, то можем ли мы каким-то образом получить имя SOв котором метод присутствует.В приведенном выше примере, если я могу понять, что foo()
является частью B.so
, я могу выполнить простую проверку, чтобы определить, находится ли он в нужной библиотеке.
Код написан на языке C.Может кто-нибудь, пожалуйста, дайте мне знать, как это может быть достигнуто?Заранее спасибо.