#linux #shared-libraries #dynamic-linking #dlopen
#линукс #общие библиотеки #динамическое соединение #dlopen
Вопрос:
Я работаю в Linux. Когда мое приложение ссылается на общую библиотеку (которая не скрывает символы), все символы из этой библиотеки видны. Общая библиотека также может быть загружена во время выполнения с помощью dlopen
. Можно ли управлять видимостью символов с помощью dlopen
параметра режима или мне всегда нужно использовать символ желания dlsym
?
Ответ №1:
Ваш вопрос чрезвычайно неясен.
Если вы dlopen
библиотека, то, пожалуй, единственный способ добраться до любого из ее символов-это через dlsym
.
Однако, если вы dlopen
используете библиотеку RTLD_GLOBAL
, то ее символы становятся доступными для последующих загруженных библиотек без использования dlsym
.
Например, если libfoo.so
определяет символ foo
, и если вы dlopen("libfoo.so", RTLD_GLOBAL|...);
и позже dlopen("libbar.so", ...)
, который использует foo
, это сработает- libbar.so
сможете использовать foo
libfoo.so
его без каких-либо dlsym
вызовов.