Как вместе .h, .lib и .dll работают вместе

Чтобы использовать функцию FreeGlut librarie, мне пришлось сделать следующее:

  • Добавлен freeglut.h в качестве файла заголовка
  • Добавлен freeGlut.lib как файл ресурсов
  • Скопировал freeGlut.dll в мою папку windows / SysWOW64

Но как вся эта система (.h, .lib и .dll) взаимосвязана друг с другом?

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

25
задан Quazi Irfan 20 June 2011 в 18:47
поделиться

3 ответа

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

Библиотечные файлы (lib или dll) содержат объектный код, на который ссылается код, использующий библиотеку.

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

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

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

23
ответ дан 28 November 2019 в 21:00
поделиться

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

.lib-файл используется, чтобы сообщить компоновщику, где искать реализации - обычно они просто упакованы в саму .lib, но в этом случае у вас есть библиотека импорта, поэтому он говорит: «В .DLL, что я будет динамически загружаться во время выполнения ".

Файл .dll является реализацией и загружается во время выполнения. Обычно вы не копируете это в системную папку, а оставляете их в папке с вашим .exe.

20
ответ дан 28 November 2019 в 21:00
поделиться

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

.Lib-файл необходим для шага ссылки: на этом этапе у вас будет набор объектных файлов, которые ссылаются на функции FreeGLUT, но не имеют фактического определения / реализации их. В этом случае он будет определять их как импорт DLL из FreeGLUT.DLL, который разрешается во время загрузки.

Файл .dll - это то место, где код фактически живет, и он необходим для выполнения. Он должен находиться где-то на вашем пути или в каталоге, из которого вы запускаете код, чтобы Windows могла его найти. Обратите внимание, что SysWOW64 почти наверняка не подходит для этого; вам нужно либо настроить Visual Studio для копирования его в каталог bin \ debug, либо поместить его в другое место и добавить этот каталог в среду PATH (затем перезапустите Visual Studio, чтобы забрать его).

3
ответ дан 28 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: