Здравствуйте, 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 — чтобы не засорять пространство имен