VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。
Reusable Library
Switch
Library
Macro(s) Defined
Single Threaded |
/ML |
LIBC |
(none) |
Static MultiThread |
/MT |
LIBCMT |
_MT |
Dynamic Link (DLL) |
/MD |
MSVCRT |
_MT and _DLL |
Debug Single Threaded |
/MLd |
LIBCD |
_DEBUG |
Debug Static MultiThread |
/MTd |
LIBCMTD |
_DEBUG and _MT |
Debug Dynamic Link (DLL) |
/MDd |
MSVCRTD |
_DEBUG, _MT, and _DLL |
其中以小写“d”结尾的选项表示的DEBUG版本的,没有“d”的为RELEASE版本。大型项目中必须要求所有组件和第三方库的运行时库是统一的,否则将会出现LNK2005 http://msdn.microsoft.com/zh-cn/library/72zdcz6f(VS.80).aspx井喷。
单线程运行时库选项/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在非必要时最好也不要采用了。
参考:
《How to link with the correct C Run-Time (CRT) library》 http://support.microsoft.com/kb/140584/en-us
《/MD、/MT、/LD(使用运行时库)》 http://msdn.microsoft.com/zh-cn/library/2kzt1wy3(VS.80).aspx
分享到:
相关推荐
比较全的vc运行时库。。。。。。。。。。。。。。。。
在安装或更新这些库时,需要注意版本匹配,因为不同的VC++项目可能依赖特定版本的运行时库。 在64位系统上,通常需要同时安装x86和x64版本的运行时库,因为有些应用程序可能是32位的,而系统本身是64位的。这些库...
**VC2008运行时库详解** Visual C++ 2008(简称VC2008)是微软开发的一款强大的C++编程工具,它为开发者提供了丰富的功能和高效的工作环境。在使用VC2008进行软件开发时,有时会遇到一个关键组件——VC2008运行时库...
西西软件园是一个知名的软件下载网站,可能提供了这个VC运行库的下载链接和使用说明。 总的来说,VC环境运行库对于Windows用户来说是必不可少的,特别是对于那些喜欢使用免安装软件或者经常遇到“缺少msvcrXX.dll”...
标题中的"VC RedistInstaller(VC运行库文件)"指的是一个用于安装VC++运行库的集合包,它包括了不同版本的VC运行时库,如VC2008、VC2010和VC2012等。这些运行库包含了C++标准库、MFC(Microsoft Foundation Classes)...
"VC8.0运行库_VC运行库最新版本.rar"是一个包含VC++8.0运行库安装程序和其他相关资源的压缩包。`vcredist_x86.exe`是关键文件,用于确保32位系统能够运行使用VC++8.0编译的软件。同时,提供的链接文件可能指向更多...
**VC运行库2011**是微软Visual C++开发工具的一个重要组成部分,它为基于C++编程语言的软件提供必要的运行环境。这些运行库包含了编译器生成的动态链接库(DLLs),使得计算机在运行使用Visual C++开发的应用程序时...
VC运行库中的DLL文件,如msvcrXX.dll(XX表示版本号),提供了C运行时库、C++标准库、MFC库等必要的功能,例如内存管理、字符串操作、异常处理等。当一个使用VC++编译的程序启动时,系统会自动寻找并加载对应的运行...
**VC运行库V9详解** VC运行库是微软Visual C++编译器生成的动态链接库(DLL),它们包含了运行由VC++开发的应用程序所需的多种关键功能和组件。标题中的"VC运行库V9"指的是Microsoft Visual C++ 2008 ...
**VC6 MFC运行库详解** ...总的来说,VC6 MFC运行库是支持使用VC6开发的MFC程序运行所必需的组件,包括MFC核心库文件、C运行时库文件等。在部署和维护这些程序时,理解这些库的作用和依赖关系至关重要。
总结来说,VC9, VC11, 和 VC14 运行库是运行由相应版本的Visual C++编译的程序所必需的组件,它们提供了C++运行时环境,包括内存管理和多线程支持等功能。对于开发者和用户而言,确保正确安装这些运行库是确保软件...
有时,由于不同的PHP版本可能依赖于不同版本的VC运行库,因此在切换版本时可能会出现缺失相应运行库的错误。 压缩包内的文件"vc11_x86.exe"和"vc9_x86.exe"是分别对应VC11和VC9的32位安装程序。在安装这两个运行库...
VC2005运行库主要提供了对C++标准库、MFC(Microsoft Foundation Classes)、ATL(Active Template Library)以及C运行时库(CRT)的支持。这些库包含了C++编程中的常用功能,如字符串处理、内存管理、I/O操作、线程...
VC运行库主要由多个版本组成,包括x86(32位)和x64(64位)版本,以满足不同架构的系统需求。"VC_redist.x64.exe"是64位系统的安装包,而"VC_redist.x86.exe"则是为32位系统设计的。它们分别包含了各自对应平台上...
在使用VC编译的程序中,常常需要依赖一些运行时库才能正常运行,这些库就是所谓的"VC运行时"。本绿色版集合了从VC6到VC2015的常用运行时动态库,涵盖了多个版本,包括对MFC(Microsoft Foundation Classes)的支持。...
玩游戏,或者运行啥程序,提示缺乏各种动态库的,都可以使用这个工具进行安装,集成了VC2005到VC2019的运行时库,且不会与系统中的原有类似动态库冲突(都是微软官方整合的),非常推荐出现类似问题然后网上到处找...
当运行程序时出现“缺少XXX.dll”错误,通常是因为该程序依赖的VC140运行库未正确安装或找不到。此时,可以从已提供的压缩包中提取所需的DLL文件,如msvcp140.dll、vcruntime140.dll等,并将其复制到出错程序的执行...
在Windows平台上,VC运行时库分为两种版本:x86(32位)和x64(64位)。这对应于压缩包内的`vcredist_x86.exe`和`vcredist_x64.exe`文件,它们分别是32位和64位系统的运行时库安装程序。当用户尝试运行由VS2008编译...
**VC11运行库(32位)**是微软Visual C++的一个重要组成部分,主要用于支持运行使用Visual C++ 2012编译器开发的32位应用程序。这个运行库包含了必要的动态链接库(DLLs),这些库是很多Windows应用程序在执行时需要...
因此,当用户遇到PHPStudy启动问题时,检查和安装相应的VC运行库是常见的解决方案之一。 总的来说,VC11和VC14运行库是PHPStudy运行PHP5.5和PHP7不可或缺的组件,特别是对于那些依赖C++编译器特性的扩展。了解并...