参考:https://www.cnblogs.com/azbane/p/7364060.html
只对其中自己用得到的重点做了个笔记。
1..h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
2.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了(放在Debug文件夹里)。在开发和调试阶段,当然最好都有。
3..h .lib .dll三者的关系是:
H文件作用是:声明函数接口
DLL文件作用是: 函数可执行代码
LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置
4.目前以lib后缀的库有两种。
一种为静态链接库(Static Libary,以下简称“静态库”)。静态库是一个或者多个obj文件的打包。静态库本身就包含了实际执行代码、符号表等等。
另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。
5.DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
6.静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了,是在链接的时候将lib链接到目标代码中。。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。