Как работает .h, .lib & .dll вместе - PullRequest
25 голосов
/ 20 июня 2011

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

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

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

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

Ответы [ 3 ]

22 голосов
/ 20 июня 2011

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

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

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

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

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

20 голосов
/ 20 июня 2011

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

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

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

3 голосов
/ 20 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...