.h,.lib和.dll如何协同工作

Qua*_*fan 25 c++ visual-studio-2010

要使用FreeGlut librarie功能,我必须执行以下操作,

  • 添加了freeglut.h作为头文件
  • 添加了freeGlut.lib作为资源文件
  • 将freeGlut.dll复制到我的windows/SysWOW64文件夹

但是,整个系统(.h,.lib和.dll)如何相互关联?

我知道,最基本的事情是添加一个带有类声明的头文件,并在其各自的源文件中写入正文.最后将头文件包含在主应用程序中.

Alo*_*ave 23

您必须包含头文件,以便编译器能够理解库公开/使用的各种类型和函数的声明.

库文件(lib或dll)包含使用库链接到的代码所链接的目标代码.

对于lib,链接是静态的并且在编译时发生.使用静态库(lib)会导致可执行文件的大小增加,因为整个lib链接到您的程序.

对于dll,链接是动态的,并且在运行时调用调用.当使用dll时,可执行文件的大小不会增加,因为dll在运行时链接,并且您通常需要将它们放在预定义的路径上,以便它们可以在运行时链接.

静态库优于dll的优点是使用lib的可执行文件是独立的,而在dll的情况下,dll需要存在于运行使用它的可执行文件的预定义路径上.

  • 有时lib包含完整的实现,有时它只包含调用DLL的存根.只有它包含完整的实现,它才是静态链接. (28认同)

Pup*_*ppy 20

头文件声明了所有内容,以便编译器知道您将提供它.

.lib文件用于告诉链接器在哪里找到实现 - 通常它们只是打包在.lib本身,但在这种情况下你有一个导入库,所以它说"在.DLL中我会动态加载在运行时".

.dll文件是实现,在运行时加载.通常你不会将它复制到你的系统文件夹,而是将它们留在你的.exe文件夹中.