Чтобы использовать функцию FreeGlut librarie, мне пришлось сделать следующее:
Но как вся эта система (.h, .lib и .dll) взаимосвязана друг с другом?
Я знаю, большинство основная вещь - добавить файл заголовка с объявлением класса и записать тело в соответствующий исходный файл. Наконец, включите файл заголовка в основное приложение.
Вы должны включить заголовочные файлы, чтобы компилятор понимал объявления различных типов и функций, которые предоставляются / используются библиотекой.
Библиотечные файлы (lib или dll) содержат объектный код, на который ссылается код, использующий библиотеку.
для lib связь является статической и происходит во время компиляции. Использование статической библиотеки (lib) приводит к увеличению размера исполняемого файла, поскольку вся библиотека связана с вашей программой.
для dll связь является динамической, и вызовы оцениваются во время выполнения. При использовании dll размер вашего исполняемого файла не увеличивается, поскольку библиотеки dll связаны во время выполнения, и вам обычно нужно размещать их по предопределенным путям, чтобы их можно было связать во время выполнения.
Преимущество статической библиотеки перед dll заключается в том, что исполняемый файл, использующий lib, является автономным, в то время как в случае dll dll должен присутствовать по заранее заданному пути во время работы исполняемого файла, который его использует.
Заголовочный файл объявляет все, чтобы компилятор знал, что вы его предоставите.
.lib-файл используется, чтобы сообщить компоновщику, где искать реализации - обычно они просто упакованы в саму .lib, но в этом случае у вас есть библиотека импорта, поэтому он говорит: «В .DLL, что я будет динамически загружаться во время выполнения ".
Файл .dll является реализацией и загружается во время выполнения. Обычно вы не копируете это в системную папку, а оставляете их в папке с вашим .exe.
Файл .h необходим для этапа компиляции: он объявляет набор функций, структур и сигнатур, доступных в FreeGLUT, чтобы компилятор мог кодировать их.
.Lib-файл необходим для шага ссылки: на этом этапе у вас будет набор объектных файлов, которые ссылаются на функции FreeGLUT, но не имеют фактического определения / реализации их. В этом случае он будет определять их как импорт DLL из FreeGLUT.DLL, который разрешается во время загрузки.
Файл .dll - это то место, где код фактически живет, и он необходим для выполнения. Он должен находиться где-то на вашем пути или в каталоге, из которого вы запускаете код, чтобы Windows могла его найти. Обратите внимание, что SysWOW64 почти наверняка не подходит для этого; вам нужно либо настроить Visual Studio для копирования его в каталог bin \ debug, либо поместить его в другое место и добавить этот каталог в среду PATH (затем перезапустите Visual Studio, чтобы забрать его).