Подтвердить что ты не робот

Как работает .h,.lib &.dll

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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