VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。
目前Win7、Win10等,选择MD问题不大,但是XP等一些比较老的系统需要选择MT
/MT是 "multithread, static version ” 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。
/MD是 "multithread- and DLL-specific version” ,意思是多线程DLL版本,定义了它后,编译器把 MSVCRT.lib 安置到OBJ文件中,它连接到DLL的方式是静态链接,实际上工作的库是MSVCR80.DLL。
即:
静态运行时库:LIBCMT.lib
动态运行时库:MSVCRT.lib + MSVCR80.DLL
(1)程序就不需要静态链接运行时库,可以减小软件的大小;
(2)所有的模块都采用/MD,使用的是同一个堆,不存在A堆申请,B堆释放的问题。
(1)有些系统可能没有程序所需要版本的运行时库,程序必须把运行时库静态链接上。
link是指boost生成的动态库还是静态库,而runtime-link是指boost链接系统运行时库的方式,静态链接或者动态链接。
link=shared runtime-link=shared编译出来是同时存在lib和dll的。其中lib文件为动态库的引导库。
link=static runtime-link=shared编译出来的只有lib文件。
link=static runtime-link=static编译出来的只有lib文件。