Курсовая работа: Разработка статических и динамических библиотек на языке программирования С/C++ в операционных системах UNIX
Закрывается библиотека функцией:
dlclose(void *handle);
При закрытии библиотеки динамический линковщик проверяет счетчик количества открытий библиотеки, и если она была открыта несколькими программами одновременно, то она не выгружается до тех пор, пока все программы не закроют эту библиотеку.
Для примера создадим программу, которая в качестве параметра получает название функции, которую она будет использовать в работе. Например, это будут математические функции возведения в степень. Создадим сначала динамическую библиотеку. Пишем ее код:
double power2(double x){
return x*x;
};
double power3(double x){
return x*x*x;
};
double power4(double x){
return power2(x)*power2(x);
};
//......
Сохраняем его в файл lib.c и создаем динамическую библиотеку libpowers.so следующими командами:
olya:~# gcc -fPIC -c lib.c
olya:~# gcc -shared lib.o -o libpowers.so
Теперь создаем основную программу в файле main.c :
#include <stdio.h>
/* заголовочный файл для работы с динамическими библиотеками */
#include <dlfcn.h>
int main(int argc, char* argv[]){
void *ext_library;// хандлер внешней библиотеки
double value=0;// значение для теста
double (*powerfunc)(double x);// переменная для хранения адреса функции
//загрузка библиотеки
ext_library = dlopen("/root/libpowers.so",RTLD_LAZY);
if (!ext_library){
//если ошибка, то вывести ее на экран