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

бесплатно 0
4.5 196
Компиляция программ на языке C/C . Компиляция нескольких файлов. Библиотеки объектных файлов. Создание статической и динамической библиотеки. Функции работы. Создание динамической библиотеки для решения системы линейных уравнений.


Аннотация к работе
Так как процесс правки при большом исходном тексте становится сложным и поиск небольшой ошибки может повлечь за собой вынужденное "изучение" кода заново. Но если каждая функция будет содержаться в отдельном файле, то таких файлов может оказаться десятки или даже сотни. Библиотека объектных файлов - это файл содержащий несколько объектных файлов, которые будут использоваться вместе в стадии линковки программы. Библиотека содержит символьный индекс, который состоит из названий функций и переменных и т.д., которые содержатся в библиотеке. Это позволяет ускорить процесс линковки программы, так как поиск функций и переменных в объектных файлах библиотеки происходит намного быстрее, чем поиск в наборе указанных объектных файлов.Дело обстоит несколько сложнее, если эта программа становится большой. При работе с такой программой может возникнуть несколько достаточно серьезных проблем: Файл, становясь большим, увеличивает время компиляции, и малейшие изменения в исходном тексте автоматически вынуждают тратить время программиста на перекомпиляцию программы. Если над программой работает много человек, то практически невозможно отследить сделанные изменения. Назовем этот файл main.c: #include Файлы назовем f1.c и f2.c: // файл f1.c int f1()Естественно, если каждая функция будет содержаться в отдельном файле, то таких файлов может оказаться десятки или даже сотни. Библиотека объектных файлов - это файл содержащий несколько объектных файлов, которые будут использоваться вместе в стадии линковки программы. Нормальная библиотека содержит символьный индекс, который состоит из названий функций и переменных и т.д., которые содержатся в библиотеке. Это позволяет ускорить процесс линковки программы, так как поиск функций и переменных в объектных файлах библиотеки происходит намного быстрее, чем поиск в наборе указанных объектных файлов. Статическая библиотека - это коллекция объектных файлов, которые присоединяются к программе во время линковки программы.Для создания статических библиотек существует специальная простая программа называемая ar (сокр. от archiver - архиватор). Создадим из файлов f1.c и f2.c отдельную библиотеку. Для того, чтобы создать библиотеку из объектых файлов надо вызвать программу ar со следующими параметрами: ar rc libимя_библиотеки.а [список_*.o_файлов] В результате получим файл libfs.a, в котором будут лежать копии объектых файлов f1.o и f2.o. Далается это командой: ranlib libимя_библиотеки.а Программа ranlib добавит индекс к архиву и получится полноценная статическая библиотека объектных файлов.Как мы уже говорилось в курсовой работе, динамические библиотеки немного лучше статических, но их использование более сложное. Для начала стоит сказать, что объектный файл создаваемый нашим проверенным способом вовсе не подходит для динамических библиотек. Несколько различных программ могут использовать одну библиотеку, и каждая из них располагается в различном адресном пространстве. В результате получим динамическую библиотеку libfsdyn.so, которая по моей задумке будет динамической версией библиотеки libfs.a, что видно из названия :) Теперь, чтобы компилировать результирующий файл с использованием динамической библиотеки нам надо собрать файл командой: olya:~# gcc-с main.с olya:~# gcc main.o-L. В данном случае файл созданный с динамической библиотекой занимает чуть больше места, но это лишь от того, что программа используемая нами совершенно примитивная и львиную долю там занимает специальный код для использования динамических возможностей../rezultdyn: error in loading shared libraries: libfsdyn.so: cannot open shared object file: No such file or directoryolya:/# Это сообщение выдает загрузчик динамических библиотек(динамический линковщик - dynamic linker), который в нашем случае не может обнаружить библиотеку libfsdyn.so. Программа использует три библиотеки: libc.so.6 - стандартную библиотеку функций языка C . ld-linux.so.2 - библиотеку динамической линковки программ ELF формата. libfsdyn.so - нашу динамическую библиотеку функций. Динамический линковщик ищет библиотеки только в известных ему каталогах, а каталог нашей программы ему явно не известен. Для того, чтобы добавить нашу директорию с библиотекой в список известных директорий надо подредактировать файл /etc/ld.so.conf.Программа сама может вызывать любые функции из библиотеки, когда ей захочется. Для этого всего-лишь надо использовать библиотеку dl, которая позволяет линковать библиотеки "на лету". Чтобы вызывать какие-то функции из динамической библиотеки сначала надо открыть эту библиотеку (можно сказать "загрузить"). Пока мы не будем задумываться над этим, и я приведу стандартный код для открытия библиотеки: void *library_handler; Закрывается библиотека функцией: dlclose(void *handle);В качестве примера использования динамических библиотек напишем программу для решения системы линейных уравнений. Программа в качестве параметров принимает значение коефициентов системы и название функции, которую она использует. Создадим д

План
Содержание

Введение

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

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

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

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

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

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

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

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

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

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

Выводы

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

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

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

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

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

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

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

Компилятор превращает код программы на "человеческом" языке в объектный код понятный компьютеру. Компиляторов под Linux существует много, практически для каждого распространенного языка. Большинство самых востребованных компиляторов входит в набор GNU Compiler Collection, известных под названием GCC (http://gcc.gnu.org/).

Изначально аббревиатура GCC имела смысл GNU C Compiler, но в апреле 1999 года сообщество GNU решило взять на себя более сложную миссию и начать создание компиляторов для новых языков с новыми методами оптимизации, поддержкой новых платформ, улучшенных runtime-библиотек и других изменений (http://gcc.gnu.org/gccmission.html). Поэтому сегодня коллекция содержит в себе компиляторы для языков C, C , Objective C, Chill, Fortran, Ada и Java, как библиотеки для этих языков (libstdc , libgcj, ...).

Компиляция программ производится командой: gcc

После этого, если процесс компиляции пройдет успешно, то вы получите загружаемый файл a.out, запустить который можно командой: ./a.out

Для примера давайте напишем маленькую простейшую программку: #include int main(){ printf("[http://linux.firststeps.ru]

");

printf("Our first program for Linux.

");

return 0;

};
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?