VC代码生成里面的/MT /MTd /MD /MDd的意思

VC代码生成里面的/MT /MTd /MD /MDd的意思。

意思上已经很明白了。但是往往很多人弄不清楚到底怎么选择。

/MT是 "multithread, static version ” 意思是多线程静态的版本。

定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。

/MD是 "multithread- and
DLL-specific version

,意思是多线程DLL版本,定义了它后,编译器把
MSVCRT.lib 安置到OBJ文件中,它连接到DLL的方式是静态链接,实际上工作的库是MSVCR**.DLL。

即:

静态运行时库:LIBCMT.lib

动态运行时库:MSVCRT.lib + MSVCR**.DLL

说白了,就是是否把对应的库打包到exe中。

时间: 2024-10-06 02:52:22

VC代码生成里面的/MT /MTd /MD /MDd的意思的相关文章

(转)VC运行库MD /MDd /MT /MTd /ML /MLd

VC编译选项 - 多线程(/MT) - 多线程调试 (/MTd) - 多线程DLL (/MD) - 多线程调试DLL (/MDd) C 运行时库 库文件 - Single thread(static link) ML libc.lib - Debug single thread(static link) MLd libcd.lib - MultiThread(static link) MT libcmt.lib - Debug multiThread(static link) MTd libcm

md /mdd /ml /mt/mtd

http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html VC编译选项 多线程(/MT)多线程调试(/MTd)多线程 DLL (/MD)多线程调试 DLL (/MDd)C 运行时库                        库文件Single thread(static link) ML            libc.libDebug single thread(static link) MLd        libcd.

md/mdd/mt/mtd

  名称 说明 mt   多线程 定义了_MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中  mtd    多线程调试 定义_DEBUG 和 _MT.此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中 md   多线程DLL 定义了_MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 .obj文件中. mdd   多线程DLL调试 定义_DEBUG._MT 和 _DLL,将MSVCRTD.lib 放入 .obj 文件中. 注意: 使用相同的编

/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题

一.MD(d).MT(d)编译选项的区别 1.编译选项的位置 以VS2005为例,这样子打开: 1)         打开项目的Property Pages对话框 2)         点击左侧C/C++节 3)         点击Code Generation节 4)         右侧第六行Runtime Library项目 2.各个设置选项代表的含义 编译选项 包含 静态链接的lib 说明 /MD _MT._DLL MSVCRT.lib 多线程.Release.DLL版本的运行时库 /

VS链接过程中与MSVCRT.lib冲突

vs代码生成有/MT,/MTd,/Md,/MDd四个编译选项,分别代表多线程.多线程调试.多线程DLL.多线程调试DLL. 编译时引用的lib分别为libcmt.li.libcmtd.lib.msvcrt.lib.msvcrtd.lib. 当你使用外部的库时,你引用的库用的编译选项和你当前项目用到的编译想象不同,因此分别用了相类似功能的不同lib,这些lib因为功能相似. 所以符号也有很多重复,因此就发生了以上现象. 解决方案:(任选一种)    1. 最简单的,更改你的项目设置:菜单--项目-

VS2010编译Boost 1.57 静态链接库

0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/history/version_1_57_0.html,选择windows版 编译器:VS2010 编译目标:静态链接库 C/C++运行库链接方式: /MT  /MTd   /MD   /MDd 官网给出的windows平台编译器测试包括 Windows: GCC, mingw: 4.4.0, 4.4.7. 4.5.4, 4.6.3, 4.7.2, 4.7.3, 4.8.0, 4.8.2,

关于DCMTK源代码编译的总结

1.DCMTK cmake出来的代码是一样的.MT和MD版本的区别在于DCMTK工程下的每个子工程的代码生成中的MT还是MD,只要修改成为相应的值就可以了. 2.依赖包的选择.依赖包必须与上面中所说的MT和MD相对应.且每个分为release和debug版本.因此有四个版本的依赖包.(这个没有验证过,只是根据依赖包里面分为release和debug版本的猜想) 圆圈内的事debug版本,格式都是xxxxx_d.lib;矩形内的release版本,格式为xxxxx_o.lib. 3.更改DCMTK

VC , Linux 静态编译与动态编译 (MD, MT)

首先从Linux下开始讲起,因为Linux编程对程序的理解要清楚一些,相比之下VC就比较容易糊涂. 当动态编译时,你发布的程序体积较小,在运行的时候需要同时提供你用到的dll / so文件. 当静态编译时,你发布的程序体积较大,包含所有符号,运行时不需要其他的 dll / so的支持,可以独立运行. 静态编译的目的是使发布的程序可以独立运行,不依赖于其他*.so,在技术上是把所有依赖的符号打包链接进了目标程序.这时候你会发现编译出来的程序的体积要大一些(Link的速度也会慢一些). 编译过程分为

Visual C++ 编译器选项/MD、/ML、/MT、/LD

前段时间编译一个引用自己写的静态库的程序时老是出现链接时的多个重定义的错误,而自己的代码明明没有重定义这些东西,譬如:LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined in libc.lib(_file.obj)LIBCMT.lib(_file.obj) : error LNK2005: ___endstdio already defined in libc.lib(_file.obj)LIBCMT.lib(_