- •Цель работы
- •Задание на лабораторную работу
- •1. Создать проект с подключением стандартной статической математической библиотеки.
- •Вывод
- •Контрольные вопросы
- •2. Какие виды библиотек существуют? В чем их различие?
- •3. Какими командами можно подключить библиотеки?
- •4. Как подключить только статическую библиотеку?
- •5. Какие опции при подключении библиотек используются?
- •7. Поясните назначение утилиты ar.
- •8. Поясните назначение утилиты ranlib
Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский Технический Университет Связи и Информатики»
Кафедра математической кибернетики и информационных технологий
Лабораторная работа №6 по дисциплине «Системное программирование»: «Работа со статическими библиотеками в языке программирования с»
Выполнил студент группы БФИ1901 Рахимов Егор Проверил:
Фатхулин Тимур Джалильевич
|
Оглавление |
Цель работы ............................................................................................................. |
3 |
Задание на лабораторную работу............................................................................ |
3 |
1.Создать проект с подключением стандартной статической
математической библиотеки.................................................................................. |
3 |
2.Создать собственную статическую библиотеку. Связать созданную
библиотеку с основной программой несколькими способами. ........................... |
5 |
Вывод ....................................................................................................................... |
8 |
Контрольные вопросы ............................................................................................. |
8 |
Цель работы
Изучить и практически освоить основы работы со статическими
библиотеками в языке программирования C.
Задание на лабораторную работу
1.Создать проект с подключением стандартной статической математической библиотеки.
Создаю файл «power.c» с кодом
Рисунок 1 – Создание файла «power.c»
Для сборки приведенной программы необходимо указать следующую команду(Рисунок 2): $ gcc -o power1 power.c -lm
Здесь предпочтение отдается динамической библиотеке. Теперь при компоновке укажите опцию -static, тогда приоритет изменится в сторону статической библиотеки(Рисунок 2):
$ gcc -static -o power2 power.c -lm
Чтобы использовать статический вариант математической библиотеки, в вашей
Linux-системе должен быть установлен пакет glibc-static-devel. Запустите последовательно оба варианта программы, вычислите значение, получаемое
при возведении 2 в степень 10 (210) (Рисунок 2):
./power1 2 10
./power2 2 10
Сделайте снимок экрана. Просмотрите содержимое директории с проектом(Рисунок 2):
ls –la
Рисунок 2– Выполнение команд Вывод: Исполняемый файл, полученный в результате линковки с опцией -
static, значительно больше. Это обусловлено тем, что статическая библиотека полностью внедряется в исполняемый файл, а совместно используемая библиотека лишь оставляет информацию о себе.
2.Создать собственную статическую библиотеку. Связать созданную библиотеку с основной программой несколькими
способами.
Создание директорий представлено на рисунке 3
Рисунок 3 – Создание директорий Создайте файл статической библиотеки "static.c"(Рисунок 4):
Рисунок 4 – Создание файла «static.c»
Ключевое слово extern в файле статической библиотеки необходимо для того,
чтобы функция была видна в основной программе. Теперь скомпилируйте (!
без линковки) библиотеку(Рисунок 5):
$ gcc -c static.c -o static.o (на выходе имеем файл static.o, содержащий объектный код нашей библиотеки).
Рисунок 5 – Компиляция файла
Далее вызовите утилиту ar со следующими параметрами(Рисунок 6): $ ar rc libMY_STATIC.a static.o
Рисунок 6 – Сборка библиотеки
Утилита ar обычно упаковывает несколько (это важно, дело не ограничивается только одним объектным файлом) объектных файлов в одну статическую библиотеку. Проиндексируйте функции внутри библиотеки для более быстрой линковки(Рисунок 7):
$ ranlib libMY_STATIC.a
Рисунок 7 – Индексация библиотеки Программа ranlib добавит индекс к архиву и получится полноценная
статическая библиотека объектных файлов. Итак, мы получили статическую библиотеку "libMY_STATIC.a". Создайте в директории "project" файл основной программы "program1.c" со следующим кодом:
Рисунок 8– Программный код файла «program1.c»
Скомпилируйте и слинкуйте (в том числе с нашей библиотекой) основную программу (предполагается, что в качестве аргумента gcc будут переданы полные пути (!) к библиотеке)(Рисунок 9):
$ gcc program1.c libMY_STATIC.a
Запустите программу(Рисунок 9):
./a.out
Рисунок 9 – Результат работы программы Теперь вторым способом свяжите статическую библиотеку с основной программой. Для этого скопируйте статическую библиотеку
"libMY_STATIC.a" в директорию "project" и введите команды(Рисунок 10): $ gcc program1.c -L. –lMY_STATIC –o a1.out