【编译产出】:
静态库:.lib(包含所有代码实现)
动态库:.dll(包含所有代码实现)和.lib(只包含函数名称和地址信息,所以比静态库lib小很多)
【使用方法】
静态库:exe使用时只需要代码引入lib即可,编译期会把lib的代码编译到exe中,exe文件较大。
动态库:exe使用动态库时不管显示调用还是隐式调用目录下必须要有dll。
代码中隐式调用需要引入.lib,如果显示调用则不用.lib。
【典型案例】
在我们编译C++代码时,会使用msvcr142.dll中的函数和数据,以支持C++标准库的功能。例如,在使用C++的cout对象输出信息时,会调用msvcr142.dll中的某些函数来实现实际的输出操作。
1、/MT
使用/mt选项,则编译器会使用静态连接的运行时库,并将运行时库的代码编译到目标文件中。这样可以保证程序在所有环境下都能够正常运行,但会增加目标文件的大小。
2、/MD
如果使用/md选项,则编译器会使用动态连接运行时库,并只链接运行时库的库文件,不包含运行时库的代码。这样可以减小目标文件的大小,但需要在运行时将运行时库的库文件放在相应的路径下,才能正常运行程序(比如vs2019编译的,系统环境中或程序目录下需要包含msvcr142.dll相关dll)。