Здравствуйте, 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 — чтобы не засорять пространство имен
я сдаюсь!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)