/MD
使应用程序使用运行时库的多线程并特定于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限制。

/MDd
定义_DEBUG、_MT和_DLL,并使应用程序使用运行时库的调试多线程并特定于DLL的版本。它还使编译器将库名MSVCRTD.lib放入.obj文件中。

/MT
使应用程序使用运行时库的多线程静态版本。定义_MT并使编译器将库名LIBCMT.lib放入.obj文件中,以便链接器使用LIBCMT.lib解析外部符号。

/MTd
定义_DEBUG和_MT。此选项还使编译器将库名LIBCMTD.lib放入.obj文件中,以便链接器使用LIBCMTD.lib解析外部符号。

看到这里,我恍然大悟,原来这个开关就是控制这个C运行时库的引用方式的,真是踏破铁鞋无觅处得来全不费工夫。

当然到这里先别忙着去修改你的项目属性中关于这个开关的选项,因为当你的项目也是一个LIB时,如果使用了/MT或/MTd选项时,最终的静态LIB中就会出现LIBCMT.lib中的大量符号,导致在别的项目引用你的这个静态LIB时出现重复定义符号而无法链接的错误,怎么解决呢?其实继续看MSDN中的帮助就可以得到答案:传递给链接器的给定调用的所有模块都必须使用相同的运行时库编译器选项(/MD、/MT)进行编译。

原来如此,所有的模块保持一致就完了,但是静态的LIB貌似还是无法引用,问题依旧怎么办呢?那就是在引用了你自己的使用/MT或/MTd选项编译生成的静态LIB的项目中,不但指定对应的/MT或/MTd选项,而且需要忽略LIBCMT.lib库即可。

/MD与/MT、/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. MTd与MDd的区别

    C++ 程序修改或移植过程中有时出现编译错误,比如"链接错误,****__crt__**** ", 修改"项目 -> C/C++ ->代码生成 -> 运 ...

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

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

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

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

  6. /MD, /MDD, /ML, /MT,/MTD(使用运行时库)

    1. VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) 2. C 运行时库                              ...

  7. md /mdd /ml /mt/mtd

    From: http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 ...

  8. /MD, /MDD, /ML, /MT,/MTD(使用运行时库) .

    1. VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) 2. C 运行时库                              ...

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

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

最新文章

  1. 零基础快速学习Java技术的方法整理
  2. Sandcastle帮助文档生成器使用介绍
  3. ubuntu amd 64bit 安装 QQ for linux教程(附 不能使用中文的解决办法)
  4. IT 系统巡检时,需要关注哪些指标?
  5. 趣学python3(40)--TCP服务器和客户端(socketserver类)
  6. 常用器件选型——电源篇
  7. wxWidgets:wxRichTextCtrl概述
  8. 五年级计算机下册工作计划,五年级下学期工作计划
  9. 优化网站性能 提高网站速度访问速度的14条实践(转)
  10. JAVA 正则表达式 (超详细) .
  11. 破解tinypng文件上传的限制
  12. 下载编译curaEngine
  13. codeforces 69A(Young Physicist) Java
  14. Sen2Cor对哨兵2号L1C数据的预处理
  15. 信息学奥赛一本通 1398:短信计费 | OpenJudge NOI 1.12 02:短信计费
  16. Chrome 91 版本新特性 91 版本发行说明
  17. linux启动启动过程(基于GPT)
  18. 一线咨询师的絮絮叨叨
  19. win10家庭版安装docker
  20. 通过GPRS将GPS数据上传到服务器

热门文章

  1. 用户功能设计与实现--Django播客系统(六)
  2. easyExcel文件上传与下载
  3. Python3网络爬虫使用User Agent和代理IP隐藏身份
  4. 【Android】对话框AlertDialog的使用(一)
  5. 量子计算机中证网,电子行业:全球首款纯硅量子计算机芯片诞生
  6. 【大数据】带你理解并使用flink中的Time、Window(窗口)、Windows Function(窗口函数)
  7. 《世界上最远的距离》——泰戈尔
  8. dotNetFx40_Client_x86_x64和dotNetFx40_Full_x86_x64这两个有什么区别?两个都要安装还是安装其中一个?...
  9. 什么是pisa测试_什么是pisa考试?
  10. 渗透测试-----信息收集(通过DNS解析找IP地址、CDN、IP查询、IP物理地址、搜索引擎、网站信息收集)