Курсовая работа: Разработка статических и динамических библиотек на языке программирования С/C++ в операционных системах UNIX

olya:~# LD_LIBRARY_PATH=/root:${LD_LIBRARY_PATH}

olya:~# export LD_LIBRARY_PATH

Если обнулить эту переменную, то снова библиотека перестанет работать:

olya:~# LD_LIBRARY_PATH=""

olya:~# export LD_LIBRARY_PATH

olya:~# ./rezultdyn

./rezultdyn: error in loading shared libraries: libfsdyn.so: cannot open

shared object file: No such file or directory

olya:~#

Также параллельно можно зайти в систему под другим пользователем или даже тем же самым, но если просмотреть значение LD_LIBRARY_PATH , то увидим ее прежнее значение. Это означает, что два разных пользователя Linux не могут влиять на работу друг друга, а это и есть самое главное хорошее отличие систем Unix от большинства других систем.


4 Создание динамических библиотек

4.1 Функции работы с динамическими библиотеками

Оказывается, что использовать динамические библиотеки можно не только в начале загрузки, но и в процессе самой работы программы. Программа сама может вызывать любые функции из библиотеки, когда ей захочется. Для этого всего-лишь надо использовать библиотеку dl , которая позволяет линковать библиотеки "на лету". Она управляет загрузкой динамических библиотек, вызовом функций из них и выгрузкой после конца работы.

Для использования функций программной работы с динамическими библиотеками необходимо подключить заголовочный файл:

#include <dlfcn.h>

Чтобы вызывать какие-то функции из динамической библиотеки сначала надо открыть эту библиотеку (можно сказать "загрузить"). Открывается она функцией:

void *dlopen (const char *filename, int flag);

Параметр filename содержит путь до требуемой библиотеки, а параметр flag задает некоторые специфические флаги для работы. Функция возвращает указатель на загруженную библиотеку. В случае любой ошибки возвращается указатель NULL . В таком случае тест ошибки понятный человеку можно получить с помощью функции dlerror() . Пока мы не будем задумываться над этим, и я приведу стандартный код для открытия библиотеки:

void *library_handler;

//......

//загрузка библиотеки

library_handler = dlopen("/path/to/the/library.so",RTLD_LAZY);

if (!library_handler){

//если ошибка, то вывести ее на экран

fprintf(stderr,"dlopen() error: %s\n", dlerror());

exit(1); // в случае ошибки можно, например, закончить работу программы

};

После этого можно работать с библиотекой. А работа эта заключается в получении адреса требуемой функции из библиотеки. Получить адрес функции или переменной можно по ее имени с помощью функции:

void *dlsym(void *handle, char *symbol);

К-во Просмотров: 356
Бесплатно скачать Курсовая работа: Разработка статических и динамических библиотек на языке программирования С/C++ в операционных системах UNIX