头文件(.h),库文件(.lib)和DLL(.dll)文件是如何相关的

gpu*_*guy 5 c visual-studio-2010 visual-c++

我在驱动程序库中看到过这三个文件.这三个文件是如何相关的,文件编译的顺序是什么,每个文件的内容是什么?除此之外,我还看到.a文件与.lib相同?

Har*_* K. 6

.lib和.dll文件都是Windows库(.o或.obj文件)的可执行文件的容器,前者(.lib)包含必须静态链接到可执行文件的东西(函数,定义等)你的项目.后者(.dll)要么已经存在于您的系统中,要么将其放入您的系统中,并且它会动态链接到项目的可执行文件.

对于Unix/Linux系统,文件扩展名分别为.a和.so(即.a而不是.lib,而.so而不是.dll).

在所有情况下,编译项目时,您必须#include一个或多个由所使用(他们被称为头文件)库提供给您的.h文件的,因为那里的东西库的可执行文件里面得到定义.

编辑

静态链接库的主要优点是它是自包含的(没有外部依赖项),但它增加了您自己的可执行文件的大小.主要缺点是必须重新编译和重新分发未来的版本.

对于动态链接库,我们仅重新分发更新的库可执行文件.主要缺点是我们的程序依赖于已经安装在客户系统上的库.