Rambler's
Top100

Загрузка разделяемых объектов (shared objects) в Linux

Автор: lonesome TSH/Digital Daemons
Дата: .02.2003
Раздел: Низкоуровневое программирование в Linux

Для динамической загрузки разделяемого объекта в память используется функция dlopen(), а для получения адреса необходимой функции - dlsym()

Рассмотрим программу на Си, которая загрузит и использует функцию chomp из библиотеки chomp.so

#include <dlfcn.h>
#include <stdio.h>

char string[]="An example of shared object\n";


void main()
{

void *lib;
void (*chomp)(char *);

lib=dlopen("./chomp.so",RTLD_LAZY);
//Функция возвращает обработчик библиотеки
//Или NULL в случае ошибки

 if(!lib){
   printf("Error loading chomp.so\n");
   return;
 }


chomp=dlsym(lib,"chomp");
//dlsym() возвращает адрес функции
//Или NULL в случае ошибки
 if(!chomp){
   printf("Error loading chomp\n");
   return;
 }

chomp(string);

printf("%s\n",string);

/*
Обратите внимание: после вывода строки на экран
будет выполнен только один переход строки
хотя строка string также содержит символ '\n'
наша функция chomp исправно отрезает конечный '\n' 
*/
}

Выгрузка библиотеки из памяти производится функцией dlclose(), в качестве параметра которой передается обработчик библиотеки

Rambler's Top100