Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Создание динамической библиотеки для решения системы линейных уравнений



В качестве примера использования динамических библиотек напишем программу для решения системы линейных уравнений.

Пусть система имеет вид:

  a11*x1+a12*x2=b1;

  a21*x1+a22*x2=b2;

Решение этой системы находим через обратную матрицу A-1.

A*X=B

X=A-1*B

; ; ;

 

;

Программа в качестве параметров принимает значение коефициентов системы и название функции, которую она использует.

Создадим динамическую библиотеку:

Так как функция возвращает два результата x1 и x2 в программе будем использовать структуру.

" mytype.h" :

 

struct DPair {

    double first;

    double second;

};

Struct DPair (*powerfunc)(double, double, double, double, double, double);

 

" libsysur.c" :

 

#include " mytype.h"

 

struct DPair sys2(double a11, double a12, double a21, double a22, double b1, double b2){

//nahodim opredelitel sistemy

struct DPair dPair;

double opr=a11*a22-a12*a21;

if (opr! =0) {

    double ao11=a22; double ao12=-a21;

    double ao21=-a12; double ao22=a11;

 

    dPair.first=(ao11*b1+ao21*b2)/opr;

    dPair.second=(ao12*b1+ao22*b2)/opr;

    }

 

    return dPair;

 

}

 

Создаем динамическую библиотеку libsysur. so следующими командами:

 

bash-3.00# gcc -fPIC -c libsysur.c

bash-3.00# gcc -shared libsysur.o -o libsysur.so

 

Создаем основную программу:

 

" sysur.c" :

 

#include < stdio.h>

#include < dlfcn.h>

#include " mytype.h"

 

int main(int argc, char* argv[]){

 

void *ext_library;              //хандлер внешней функции

double a11; double a12; double a21; double a22;

double b1; double b2;             

double (*powerfunc)(double a11, double a12, double a21, double a22, double b1, double b2); //переменная, для хранения адреса функции

   

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

ext_library=dlopen(" /root/dynamik/libsysur.so", RTLD_LAZY);

if (! ext_library){

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

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

    return 1;

};

 

//загружаем из библиотеки требуемую процедуру

powerfunc=dlsym(ext_library, argv[1]); //получаем адрес требуемой функции

                                 //ext_library-адрес загруженной библ.

                       //argv-требуемая функция или переменная

 

printf(" Vvedite a11 a12: " );

scanf(" %lf %lf", & a11, & a12);

printf(" Vvedite a21 a22: " );

scanf(" %lf %lf", & a21, & a22);

printf(" Vvedite b1, b2: " );

scanf(" %lf %lf", & b1, & b2);

 

 

struct DPair sq=(*powerfunc)(a11, a12, a21, a22, b1, b2);

printf(" x1=%lf\n, x2=%d\lf", sq.first, sq.second);        

   //выводим результат работы процедуры

 

 

//закрываем библиотеку

dlclose(ext_library);

};

 

Компилируем код главной программы:

 

bash -3.00# gcc sysur.c -o sysur -ldl

 


Выводы

 

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

Использование библиотеки позволяет компактно хранить все требуемые объектные файлы в одном месте, и при этом значительно повысить скорость компиляции.

Объектные библиотеки по способу использования разделяются на статические и динамические библиотеки

Статическая библиотека - это коллекция объектных файлов, которые присоединяются к программе во время линковки программы. В работе самой программы статические библиотеки они не принимают участие, в отличие от динамических библиотек.

В динамической библиотеке объектные файлы из библиотеки не присоединяются к программе. Присоединение этих объектных файлов осуществляет системный динамический загрузчик во время запуска программы. Загрузчик проверяет все библиотеки прилинкованные с программе на наличие требуемых объектных файлов, затем загружает их в память и присоединяет их в копии запущенной программы, находящейся в памяти.

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


Список использований литературы

1. http: //club.shelek.com/

2.  http: //helpsite.narod.ru/

3. http: //myforum.net.ua/index.php?

4. http: //ishodniki.ru/

5. Робин Бурк и др.  Unix для системных администраторов.Энциклопедия пользователя. - Киев 1998. - 864с.

 


Поделиться:



Последнее изменение этой страницы: 2019-10-04; Просмотров: 131; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.015 с.)
Главная | Случайная страница | Обратная связь