#include // пример программы, использующей динамическую библиотеку Linux // с инициализацией глобальной переменной и ее выводом // учебник "Системное программирование в среде Linux", Гунько А.В., стр. 51 /* заголовочный файл для работы с динамическими библиотеками */ #include int main(int argc, char* argv[]){ void *ext_library; // хандлер 1й внешней библиотеки void *ext_library1; // хандлер 2й внешней библиотеки double value=0; // значение для теста double (*powerfunc)(double x); // переменная для хранения адреса функции char * (*ret_test)(); //загрузка библиотеки ext_library = dlopen("/home/gun/libs/so/libpowers.so",RTLD_LAZY); if (!ext_library){ //если ошибка, то вывести ее на экран fprintf(stderr,"dlopen() error: %s\n", dlerror()); return 1; }; ext_library1 = dlopen("/home/gun/libs/so/libtest.so",RTLD_LAZY); if (!ext_library){ //если ошибка, то вывести ее на экран fprintf(stderr,"dlopen() error: %s\n", dlerror()); return 1; }; printf("Libraries loaded!\n"); //загружаем из библиотеки требуемую процедуру powerfunc = dlsym(ext_library, argv[1]); value=3.0; //выводим результат работы процедуры printf("%s(%f) = %f\n",argv[1],value,(*powerfunc)(value)); printf("Testing init...\n"); ret_test = dlsym(ext_library1,"ret_test"); printf("Return of ret_test: \"%s\" [%p]\n",(*ret_test)(),(*ret_test)()); //закрываем библиотеку dlclose(ext_library); dlclose(ext_library1); };