VC运行时库/MD、/MDd、/MT、/MTd说明
来源:互联网 发布:诺基亚5320软件下载? 编辑:程序博客网 时间:2024/06/08 14:52
VC运行时库设置:VC项目属性—>配置属性—>C/C++—>代码生成—>运行时库。可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。VS2008目前支持以上4种:
各运行时库的说明,参考MSDN的/MD、/MT、/LD(使用运行时库)[msdn.microsoft.com/zh-cn/library/2kzt1wy3(v=vs.90).aspx]:
Reusable Library
Switch
Library
Macro(s) Defined
Description
Single Threaded
/ML
LIBC
(none)
VS2003以后被废弃。
Debug Single Threaded
/MLd
LIBCD
_DEBUG
VS2003以后被废弃。
Static MultiThread
/MT
LIBCMT
_MT
使应用程序使用运行时库的多线程静态版本。定义 _MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。
Debug Static MultiThread
/MTd
LIBCMTD
_DEBUG and _MT
定义 _DEBUG 和 _MT。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用 LIBCMTD.lib 解析外部符号。
Dynamic Link (DLL)
/MD
MSVCRT
_MT and _DLL
使应用程序使用运行时库的多线程并特定于 DLL的版本。定义 _MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 .obj 文件中。
用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR90.DLL, 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。
当 /MD 与 _STATIC_CPPLIB 预处理器定义 (/D_STATIC_CPPLIB) 一起使用时,您的应用程序将与静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 链接,但仍通过 msvcrt.lib 动态链接到主 CRT。
请注意,不支持 _STATIC_CPPLIB 预处理器定义和 /clr 或 /clr:pure 编译器选项的组合。有关 /clr 选项的限制的更多信息,请参见/clr 限制。
Debug Dynamic Link (DLL)
/MDd
MSVCRTD
_DEBUG, _MT, and _DLL
定义 _DEBUG、_MT 和 _DLL,并使应用程序使用运行时库的调试多线程并特定于 DLL 的版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。
其中以小写“d”结尾的选项表示的DEBUG版本的,没有“d”的为RELEASE版本。
(1)/MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。
(2)/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。
(3)结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。大型项目中必须要求所有组件和第三方库的运行时库是统一的,否则将会出现链接器工具错误 LNK2005 (C++)[msdn.microsoft.com/zh-cn/library/72zdcz6f(VS.80).aspx]井喷。
(4)实际使用参考:visual studio运行时库MT、MTd、MD、MDd的研究。
- VC运行时库/MD、/MDd、/MT、/MTd说明
- VC运行时库/MD、/MDd、/MT、/MTd说明
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC运行时库MD,MT,MTD,MDD的区别
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- 运行时库 /MT /MTD /MD /MDD
- (转)VC运行库MD /MDd /MT /MTd /ML /MLd
- opnet的simple_source模块学习
- 数据结构之堆栈的链式存储
- Android开发之Sqlite数据库
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计
- C++大文件传输
- VC运行时库/MD、/MDd、/MT、/MTd说明
- 系统启动时,数据动态加载业务若干思考
- 淘宝校招笔试题2
- mac下使用和登录ssh云服务
- Javascript通过bind()掌控this
- hibernate使用createQuery(hql)语句仅查询部分字段,应如何获得数据
- poj3624 Charm Bracelet
- 丰田hi哦废话他废铜进口
- 改变背景颜色+碰撞检测