C++ 程序修改或移植过程中有时出现编译错误,比如“链接错误,****__crt__**** ”,

修改“项目 -> C/C++ ->代码生成 -> 运行库 :MTd 或MDd 就好了。

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

VS 多线程调试和多线程DLL调试的区别:

区别是动态链接还是静态链接C运行时库(C runtime Library, CRT)。

如果是动态链接(MD/MDd),你的程序就依赖C运行时的动态链接库(比如VS2010的msvr100.dll),当你的程序在其他没有这个dll的电脑上运行就会出现错误(找不到这个dll)。

如果是静态链接(MT/MTD),C运行库直接链接到你的程序里,你的程序就不依赖C运行时库的dll了。

微软是推荐是用动态链接的,因为这种链接方式可以减少可执行文件的大小、可以减少内存的使用、避免链接问题。

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

/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在非必要时最好也不要采用了。

MTd与MDd的区别相关推荐

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

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

  2. VS 编译时 /MD 与 /MT、/MTD与/MDD的区别

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

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

    /MD 使应用程序使用运行时库的多线程并特定于DLL 的版本.定义 _MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 .obj文件中.用此选项编译的应用程序静态链接到MSVCRT.l ...

  4. VC编译选项 /ML /MLd /MT /MTd /MD /MDd之间的区别

    VC编译选项 /ML /MLd /MT /MTd /MD /MDd之间的区别 VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C ...

  5. vs编译c语言停止工作运行库mt,vc++编译时运行库选择(/MT/MTd/MD/MDd)

    vc++编译时运行库选择(/MT/MTd/MD/MDd) vc++编译时运行库选择(/MT./MTd./MD./MDd) 在vs中,项目属性 ->C/C++ ->代码生成 ->运行库 ...

  6. CMake设置MSVC工程MT/MTd/MD/MDd

    文章目录 0. 前言 1. 如何设置 1.1 CMakeLists代码 1.2 要点1:POLICY 1.3 要点2:set_property 0. 前言 在MSVC工程上右键->属性,找到配置 ...

  7. MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题

    这个话题要从哪里说起呢.博主小白一个,最近调试程序时(WIN-MSVC)连一些基本问题都没弄懂,本着遇见问题一定要解决的原则,下面来说下MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题 ...

  8. cmake编译参数重写(正在重写‘/MTd‘用‘/MDd‘)问题

    错误 使用CMakeLists编译时报类似错: # En cl : Command line warning D9025 : overriding '/MTd' with '/MDd' # 中文 cl ...

  9. visual studio运行时库MT、MTd、MD、MDd 的区别

    msdn上面的解释: MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库 MTd:mutithread+debug,多线程 ...

最新文章

  1. 【实战分享】安卓app测试的一些记录
  2. #在蓝懿学习iOS的日子#第六个练习日
  3. centos 7 安装docker 并设置阿里云镜像仓库
  4. 【NLP】预训练时代下的文本生成|模型技巧
  5. Python 爬虫之 Beautiful Soup 模块使用指南
  6. PHPCMS V9 采集实例
  7. matlab2015b修改快捷键
  8. html让时间只展示年月日_如何用html写代码,使得在网页上显示当前的时间和日期...
  9. 推荐阅读《大话设计模式》的策划编辑陈禹成写的新书《电脑使用说明书》
  10. 前端学习(3008):vue+element今日头条管理--登录中的loding
  11. Bootstrap 模态框插件Modal 的选项
  12. java web导出csv_java web 导出csv文件——文件内容追加
  13. jQuery Validate 表单验证插件----Validate简介,官方文档,官方下载地址
  14. C#生成CHM文件(入门篇)
  15. Codeforces 1153
  16. 高通QPST Download使用方法
  17. 在线html编辑器---htmlarea 附件,在线HTML编辑器htmlarea简单使用
  18. caffe入门学习:caffe.Classifier的使用
  19. 力扣46.全排列(回溯法)
  20. 经典网络架构学习-ResNet

热门文章

  1. airtest+poco多脚本、多设备批处理运行测试用例自动生成测试报告
  2. U递是一款App软件 和滴滴打车一样性质
  3. java安装出现向导中断,在Macromedia Dreamweaver 8 完整安装之前向导已中断的解决办法...
  4. L2-040 哲哲打游戏 - java
  5. 有关Access的压缩和修复数据库功能
  6. 有哪些道理你后悔没有早点知道?
  7. c语言丢手帕,题手帕原文_李希圣古诗_古诗文网
  8. 如何理解:ListString list=new ArrayListString();为甚麼要声明为List 而不是ArrayListString?
  9. s8 android调用相机,教你如何在安卓手机上使用谷歌 pixel相机
  10. ios按钮点击实现android反馈,iOS开发APP内部实现点击按钮切换语言