众所周知,在Linux下,动态库的后缀名是.so,而静态库的后缀名则是.a。但是在Windows下,静态库的后缀名是.lib,而动态库则包含两个文件,一个是.dll文件,另一个是.lib文件。下面的表格总结了Linux和Windows的差异:
类型 | Linux | Windows |
---|---|---|
静态库 | .a | .lib |
动态库 | .so | .dll + .lib |
下表是Linux使用静态库和动态库的过程:
类型 | 编译时 | 运行时 |
---|---|---|
静态库 | 链接.a文件 | 无需额外依赖 |
动态库 | 链接.so文件 | 依赖.so文件 |
下表是Windows使用静态库和动态库的过程:
类型 | 编译时 | 运行时 |
---|---|---|
静态库 | 链接.lib文件 | 无需额外依赖 |
动态库 | 链接.lib文件 | 依赖.dll文件 |
所以说在Windows下面,一个.lib文件不一定是静态库,那么,我们如何判断一个.lib文件是静态库还是动态库呢?
我们可以用VS构建工具包中的lib
命令来判断,只要输入下面的命令:
lib /list xxx.lib
如果是静态库,那么输出的结果应该是若干.obj文件,如果是动态库,那么输出的结果应该是若干.dll文件。