当前位置: 首页 > 工具软件 > MT > 使用案例 >

MT与MD

邓阳嘉
2023-12-01

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

2./MD、/MT的选择

      1、为什么选择/MD,不选/MT?

         (1)程序就不需要静态链接运行时库,可以减小软件的大小;

         (2)所有的模块都采用/MD,使用的是同一个堆,不存在A堆申请,B堆释放的问题。

      2、为什么选择/MT,不选择/MD?

         (1)有些系统可能没有程序所需要版本的运行时库,程序必须把运行时库静态链接上。

      3、多个模块,必须选择相同类型的运行时库,不要混合使用。

boost库的MT与MD

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文件。
 

 类似资料: