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

Рисунок 13 – Результат работы программы

3.Связать созданную динамическую библиотеку с основной программой.

Создадим исполняемый файл, связанный с динамической библиотекой.

Команда компиляции с динамической библиотекой выглядит так(Рисунок 14): $ gcc -o project *.o -L../library -lmy -Wl,-rpath,../library/

Здесь в отличие от команды компиляции со статической библиотеки добавлены опции для линковщика: -Wl,-rpath,../library/. -Wl - это обращение к линковщику, -rpath - опция линковщика, ../library/ - значение опции.

Получается, что в команде мы два раза указываем местоположение библиотеки: один раз с опцией -L, а второй раз с опцией -rpath. Следует заметить, что если скомпилировать программу, используя приведенную команду, то исполняемый файл будет запускаться из командной строки только в том случае, если текущий каталог project. Если сменить каталог, то будет возникать ошибка из-за того, что динамическая библиотека не будет найдена.

Но если скомпилировать программу с указанием для линковщика абсолютного адреса, то программа в данной системе будет запускаться из любого каталога. 10 Сделайте снимки экрана с содержимым всех используемых директорий.

Запустите программу на выполнение.

Рисунок 14 – Результат работы программы

Вывод

Я научился создавать динамические библиотеки, компилировать объектные файлы для создания динамической библиотеки, связывать созданную динамическую библиотеку с основной программой.

Контрольные вопросы

1. Каково предназначение динамических библиотек?

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

существует библиотека математических функций.

2. Чем динамические библиотеки отличаются от статических?

По способу компоновки библиотеки подразделяют на архивы (статические

библиотеки, static libraries) и совместно используемые библиотеки

(динамические библиотеки, shared libraries) Статическая библиотека - это такая библиотека, которая связывается (линкуется) с программой в момент компиляции оной. При этом объектный код библиотеки помещается в исполняемый файл программы. С этой точки зрения статическая библиотека похожа на исходный код программы, с которой она связывается, за исключением того, что библиотека компилируется "кем-то еще" и

программист, использующий библиотеку, имеет дело исключительно только с результатом этой компиляции.

Динамическая библиотека - библиотека, подключаемая к программе в момент выполнения. Это означает, что при создании библиотеки производится не только ее компиляция, но и линковка с другими, нужными ей, библиотеками

(!).

3. Как можно подключить стандартные динамические библиотеки к

программе?

$ gcc -o program program.c –lm

4.Какие опции используются при создании динамических библиотек?

Вотличие от статической библиотеки динамическую создают при помощи gcc,

указав опцию -shared

5. Что такое позиционно-независимый код? Каким образом он

используется?

Позиционно-независимый код (Position Independent Code) имеет возможность подгружаться к программе в момент ее запуска. Чтобы получить объектный файл с позиционно-независимым кодом, нужно откомпилировать исходный файл с опцией –fPIC. Во-вторых, опция -L, указанная при компоновке,

позволяет дополнить список каталогов, в которых будет выполняться поиск библиотек.

6. Что позволяет выполнить опция -Wl?

Опция -Wl сообщает gcc о необходимости передать линковщику определенную опцию. Далее, после запятой, следует сама опция и ее аргументы, также

разделенные запятыми.

7. Что позволяет выполнить опция -rpath?

Указать адрес библиотеки

8. Какие способы поиска совместно используемой библиотеки в нужном месте существуют?

Опция -L, указанная при компоновке, позволяет дополнить список каталогов, в

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

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