Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lr6.pdf
Скачиваний:
11
Добавлен:
01.04.2022
Размер:
880.28 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский Технический Университет Связи и Информатики»

Кафедра математической кибернетики и информационных технологий

Лабораторная работа №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

Соседние файлы в предмете Системное программирование