VC运行时库

CMake设置MSVC工程MT/MTd/MD/MDd 搞懂CMake设置MT/MD的来龙去脉~ 阅读详情

VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)

VC运行时库 - 秒大刀 - 秒大刀的城堡

Reusable LibrarySwitchLibraryMacro(s) Defined
Single Threaded/MLLIBC(none)
Static MultiThread/MTLIBCMT_MT
Dynamic Link (DLL)/MDMSVCRT_MT and _DLL
Debug Single Threaded/MLdLIBCD_DEBUG
Debug Static MultiThread/MTdLIBCMTD_DEBUG and _MT
Debug Dynamic Link (DLL)/MDdMSVCRTD_DEBUG, _MT, and _DLL

 

    其中以小写“d”结尾的选项表示的DEBUG版本的,没有“d”的为RELEASE版本。大型项目中必须要求所有组件和第三方库的运行时库是统一的,否则将会出现LNK2005井喷。

    单线程运行时库选项/ML和/MLd在VS2005以后就被废了。

    /MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。

    /MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。

    结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。

 

Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思? Microsoft Visual C++ 编译器的运行时库链接选项决定了程序如何链接 C 运行时库(CRT)。具体含义如下:(多线程静态链接):(多线程静态链接调试版):(多线程动态链接):(多线程动态链接调试版):选择考虑因素:发布类型:通常 Release 版本用或,Debug 版本用或。部署需求:如果希望程序独立运行,选择;如果允许依赖系统 DLL,可选择。内存使用:可能在多个程序间共享内存,而每个程序都有自己的 CRT 副本。兼容性:使用第三方库时,需确保所有组件使用相同的运行时库 阅读详情

相关推荐

CMake动态/静态运行时库混用陷阱:‘/MDd‘ vs ‘/MTd‘配置全解析

本文深度解析了在Windows平台使用CMake构建C++项目时,动态链接(/MDd)与静态链接(/MTd)运行时库的底层差异与混用陷阱。重点阐述了两种模式在内存管理、部署依赖和跨模块兼容性上的根本区别,并提供了如何通过现代CMake语法(如`target_compile_options`和生成器表达式)正确配置编译参数以避免致命错误,为项目构建提供清晰的决策指南。

sea99的博客 88

Windows下VC运行时库的部署、兼容性

Windows下VC运行时库的部署、兼容性

bjrxyz的专栏 4931

/MD 与 /MT、/MTD与/MDD的区别

VS在 属性页的 C/C++ -> Code Generation -> Runtime Library 一项中总共有四个选项 /MD 与 /MT、/MTD与/MDD,它们分别有什么区别?

1万+

VC运行时库的一些资料

VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。 Reusable Library Switch Library Macro(s) Defined Single Threaded /ML LIB

mail_cm的专栏 1445

使用 Inno 打包程序且安装 VC 运行时库

在使用 Inno Setup 打包程序时,如果目标机器上提示缺少 VC 运行时库(Microsoft Visual C++ Redistributable),这是因为你的程序依赖特定版本的 VC 运行时库,而目标机器上未安装这些库。以下是解决问题的几种方法....

... 1660

VC运行时库(/MD、/MT等)

    VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。 Reusable LibrarySwitchLibraryMacro(s) Defined Single Threaded /ML LIBC (none) ...

weixin_33701564的博客 370

如何在vs中链接vc6的运行时库

vc6的运行时库有个巨大的好处,就是全系列windows都自带了,而且不用管傻逼的manifest问题。

weolar的专栏 2754

VC C运行时库(CRTL)的几个版本及选用

最近做项目碰到了一个关于在动态库中使用MFC以及在静态库中使用MFC的问题,我的工程在DEBUG编译链接时都没有问题,可是到了RELEASE编译时在链接的时候就出现如下的错误:nafxcw.lib(array_s.obj) : error LNK2005: "public: __thiscall CStringArray::CStringArray(void)" (??0CStringArra

xjh_Love_paopao的专栏 3124

VC运行时库MD,MT,MTD,MDD的区别

看到一篇不错的关于运行时库的博文,于是就转了过来: 这里总结下他们的区别,后面的那个'd'是代表DEBUG版本,没有'd'的就是RELEASE版本了。 首先说/MT /MT是 "multithread, static version ” 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。 /MD

木头杭的学习博客 2166

定位vc运行时库问题,屡试不爽的一招

vc 菜单 文件| 打开|指定EXE或DLL,如有指定运行时库,则PE文件的资源中可以看到manifest 配置节 然后据此判断EXE依赖的运行时库, 再根据编译选项调整 运行时库设置

水晶鞋 867

面对系统中多个版本的VC运行时库,应用程序如何选择

目的:探究采用VC运行时库生成的应用程序,当系统中存在多个版本的VC运行时库,如何查找正确的版本,来保证程序的正常执行。环境:本文使用的开发环境为Visual Studio2005,语言为C++,使用VC运行时库来生成应用程序。必备工具:Dependency Walker正文:本人现在所用Windows XP系统中有两个版本的VC运行时库分别是CRT8.0.50727.42和CRT8.0.50727. 4053,其位于目录“C:/WINDOWS/WinSxS/”下。下面来生成一个使用了VC运行时库的小程序

cauwu的专栏 2994
上一篇: Winpcap教程(高级应用)
下一篇: JRE、JDK和SDK分别是什么? Win32 SDK是怎样一个软件?
malik76
博客等级 码龄17年 13粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值