Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Устройство библиотек C++

#cpp #библиотеки


Здравствуйте меня интересует устройство работы библиотек, именно: для чего используются
.DLL файлы библиотек и как они свзяаны с .lib файлами, которые кладутся в папку lib
компилятора, с файлами *.h ,которые кладутся в сам проект, почему нельзя просто добавить
.h файл в проект? 
Прошу мне объянснить, т.к сам в этом не разбираюсь, извините, если вопрос поставлен
глупо.    


Ответы

Ответ 1



Начнем с основ:) Первоначально компилятор превращает исходный файл в промежуточный формат .obj (т.н. объектный файл), в нем нет ничего кроме машинного кода программы и ссылок на внешние функции библиотек (ссылки получаются из файлов заголовков). В файлах заголовков как правило нет кода, там только объявления ("загловки") процедур и функций. Далее, чтобы превратить объектный файл в исполняемый, его нужно скормить линковщику, но также линковщику нужны еще и файлы .lib, в которых находятся уже скомпилированные функции, на которые есть ссылки в объектном файле. Линковщик все это хозяйство соединяет, и получается готовый исполняемый файл, в котором есть и код программы, и код вызываемых функций. Файлы lib называются статическими библиотеками, т.к. их можно присоединить к программе только во время компиляции. Также, существуют динамические (динамически подключаемые) библиотеки (dinamiс-link libraries, dll), в отличие от статических библиотек, они подключаются либо в момент запуска программы, либо уже после ее запуска. Для того чтобы подключить dll в момент запуска, к программе должна быть прилинкована статическая библиотека lib, в которой есть ссылки на функции библиотеки dll. В сам исполняемый файл добавляются только эти ссылки на функции, но не сами функции из dll.

Ответ 2



.dll - это dynamic-link library (динамически подключаемая библиотека), содержит откомпилированный код предоставляемых библиотекой функций. .lib -- это static libraries (статические библиотеки), представляют собой архив набора объектных файлов, каждый из которых является результатом компиляции одного исходного файла (.c, .cpp). .h файлы обычно содержат только объявления предоставляемых библиотекой функций и констант. Этого достаточно для компиляции кода используюшего библиотечные функции. На выходе компилятора снова получается один или несколько объектных файлов. Для того, чтобы из объектных файлов получился исполняемый файл, их (объектные файлы) нужно слинковать. В процессе линковки разрешаются обращения к библиотечным функциям либо путем вставки реализации из статических библиотек внутрь исполняемого файла, либо путем добавления ссылок на соотв. реализации в динамических библиотеках. Более детальное описание

Комментариев нет:

Отправить комментарий