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

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

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

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с.


Информация о работе «Разработка статических и динамических библиотек на языке программирования С/C++ в операционных системах UNIX»
Раздел: Информатика, программирование
Количество знаков с пробелами: 29985
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
257667
0
26

... их интеграция, расширение их возможностей в новых версиях, создание новых средств и перенос их на другие аппаратные платформы и в другие ОС IBM. 12.4 Операционная система z/VM ОС z/VM [21, 24, 42] (последняя версия - V4R2) является высокопроизводительной многопользовательской интерактивной ОС, предоставляющей уникальные возможности в части выполнения различных операционных сред на одном ...

Скачать
148576
34
0

... элементов, глобальное пространство имен, а также лавинообразную первоначальную загрузку сети. Таким образом ОСРВ SPOX имеет необходимые механизмы для создания отказоустойчивой распределенной операционной системы реального времени, концепция построения которой описана в главе 2. 4.3 Аппаратно-зависимые компоненты ОСРВ Модули маршрутизации, реконфигурации, голосования реализованы как аппаратно- ...

Скачать
40710
0
0

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

Скачать
83100
0
1

... (САПР) и пр.; -           ПС, используемые в обучении – электронные учебники, тренажеры, тесты и пр.; -           игровые программы; -           программы, созданные пользователем с помощью сред программирования. Еще один класс программного обеспечения – специальное ПО. Основное его отличие от системного ПО в том, что пользователь сам решает, будет ли он использовать эти ПС или нет, а отличие ...

0 комментариев


Наверх