Re[6]: linux, "горячая" перезагрузка so-библиотеки
От: push  
Дата: 11.03.16 21:53
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>1. Берем исходники библиотеки. Компилируем их с флагом -fPIC и линкуем с флагом -shared. Получаем в итоге shared object (динамически загружаемую "библиотеку".

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

Pzz>dlopen() уместно звать с флагами:

Pzz>RTLD_NOW — чтобы если в ней есть unresolved symbol, это вылезло сразу, а не при попытке обратиться.
Pzz>RTLD_LOCAL — чтобы не засорять пространство имен

Вот по этому я радуюсь, что не стал развиваться в Linux направлении....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.