Re[5]: linux, "горячая" перезагрузка so-библиотеки
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.03.16 19:51
Оценка: 4 (1) +3
Здравствуйте, niXman, Вы писали:

Pzz>>А что не понятно? Там совсем немного букв, и даже есть пример на Си...

X>а больше, чем уже в этой теме? ато ни осилю.

1. Берем исходники библиотеки. Компилируем их с флагом -fPIC и линкуем с флагом -shared. Получаем в итоге shared object (динамически загружаемую "библиотеку".
2. Для линковки основной программы ее НЕ ИСПОЛЬЗУЕМ
3. Вместо этого основная программа загружает .so-ку функцией dlopen(), а потом добывает указатель на входную точку (точки) функцией dlsym(). dlsym() возвращает void*, который надо откастировать к требуемому типу
4. Получив в итоге указатель на функцию, вызываем ее
5. Когда хочется перезагрузить библиотеку, "отпускаем" старую функцией dlclose(), загружаем новую функцией dlopen(), и далее все по кругу.

dlopen() уместно звать с флагами:
RTLD_NOW — чтобы если в ней есть unresolved symbol, это вылезло сразу, а не при попытке обратиться.
RTLD_LOCAL — чтобы не засорять пространство имен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.