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

  • Вид работы:
    Курсовая работа (п)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    25,33 kb
  • Опубликовано:
    2007-10-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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



Содержание

Введение

1 Компиляция программ на языке C/C++

2 Компиляция нескольких файлов

3 Создание библиотек объектных файлов

3.1 Библиотеки объектных файлов

3.2 Создание статической библиотеки

3.3 Создание динамической библиотеки

3.4 Использование динамических библиотек

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

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

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

Выводы

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

Введение

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

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

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

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

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


Компилятор превращает код программы на "человеческом" языке в объектный код понятный компьютеру. Компиляторов под Linux существует много, практически для каждого распространенного языка. Большинство самых востребованных компиляторов входит в набор GNU Compiler Collection, известных под названием GCC (#"1.files/image001.gif">;  ;

;

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

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

Так как функция возвращает два результата 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.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);

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

         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://myforum.net.ua/index.php?

4.   http://ishodniki.ru/

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

Похожие работы на - Разработка статических и динамических библиотек на языке программирования С/C++ в операционных систе...

 

Не нашел материал для своей работы?
Поможем написать качественную работу
Без плагиата!