Linux и общие библиотеки, связывание с видимостью символов dlopen

#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 вызовов.