头文件(.h)、库文件(.lib)和动态链接库文件(.dll)之间有什么关系?

5
我在驱动库中看到了这三个文件。这三个文件有什么关联,编译的顺序是什么,每个文件的内容是什么?此外,我还看到了 .a 文件,它们和 .lib 文件相同吗?

你的代码包含头文件.h和源文件(.c/.cpp)。头文件是一些代码片段,每次在源文件中#include它们时都会被复制/粘贴。当代码被编译时,编译器将源文件输出为目标文件(.o或.obj)。.lib文件只是一个包含所有目标文件的存档文件。DLL库是已编译的代码,其中包含一堆导出函数,您可以在代码中重用它们。.exe是编译后的代码,在启动时调用main()函数。 - J-Mik
1个回答

7

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

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

在所有情况下,在编译您的项目时,您必须#include一个或多个由您正在使用的库提供给您的.h文件(称为头文件),因为这就是库的可执行文件中的内容被定义的地方。

编辑

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

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


值得注意的是,还有一种称为“导入库”的东西,请参阅https://dev59.com/VHA65IYBdhLWcg3w5zDB. - Wakan Tanka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接