`

/MD、MDd 和 /MT、MTd

    博客分类:
  • C++
阅读更多

这里总结下他们的区别

后面的那个'd'是代表DEBUG版本,没有'd'的就是RELEASE版本了。

首先说/MT

/MT是 "multithread, static version ” 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。

/MD是 "multithread- and DLL-specific version” ,意思是多线程DLL版本,定义了它后,编译器把 MSVCRT.lib 安置到OBJ文件中,它连接到DLL的方式是静态链接,实际上工作的库是MSVCR80.DLL。

即:

静态运行时库:LIBCMT.lib
动态运行时库:MSVCRT.lib + MSVCR80.DLL

所以,当你用CMAKE生成工程文件时,若CMAKE是用/MT生成的(查看工程原始目录的CMakeLists.txt),则它所调用的运行时库为:LIBCMT.lib,若生成的工程的运行时库(Runtime Library)你选择/MD,则此工程在编译后链接的时候,将会调用动态运行时库:MSVCRT.lib + MSVCR80.DLL,明显,两次对同一个某运行时库里的函数调用的库不同,则会出现重定义的错误。若此工程生成的是库文件,则其他工程调用此库时也必须是/MT。

MSDN原地址:http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.80).aspx

分享到:
评论

相关推荐

    openssl WINDOWS编译好的VS2013X64,分了MT MTD MD MDD

    对于“MT”、“MTD”、“MD”和“MDD”,它们是Visual Studio的编译模式或配置类型: 1. **MT (Multi-Thread)**: 这种编译选项表示多线程静态链接库。当使用MT版本的OpenSSL时,应用程序不需要链接到动态运行时库,...

    动态链接(MD/MDd)方式链接到运行库的C++版protobuf

    按官网文档生成的lib默认链接方式为MT/MTd,此上传文件以MD/MDd方式链接。文件包含完整的vs2015解决方案、最终编译成果lib、exe等全部文件可以直接使用。 如果想自已编译,可双击protobuf-master/cmake/build/...

    opencv_2413.6_vs2010_x86_MTd_MT_MDd_MD_pdb

    4. **MDd/MD/MTd/MT**:这些是链接器选项,它们定义了运行时库的多线程和调试版本。MD和MDd分别代表多线程DLL(动态链接库)的调试和非调试版本,它们依赖于VC++运行时库的动态链接版本。MT和MTd则对应于多线程静态...

    opencv_2413.6_vs2010_x86_MTd_MT_MDd_MD

    - 根据项目需求选择合适的运行时库配置(/MD、/MDd、/MT、/MTd)。 - 确保所有依赖项都已正确设置,包括头文件目录和库目录。 - 对于静态库,注意可能出现的链接冲突或大小问题,因为静态库会将所有依赖的库代码包含...

    MFC 静态库中使用MFC, /MT /MTD Libcurl例程,内含libcurl静态库

    MFC库分为两种类型:动态链接库(/MD或/MDd)和静态链接库(/MT或/MTd)。动态链接库在运行时会依赖于MFC的DLL文件,而静态链接库则会将MFC代码直接嵌入到最终的可执行文件中。 在这个压缩包中,重点在于如何在MFC...

    zint-2.12.0-静态库(不能输出png图片)

    源码文件:zint-2.12.0-src.tar.gz 编译环境:Win11 64 位 + VS2017 使用环境:理论上适用所有Windows系统 注意事项: 1、编译工程时,添加了宏“ZINT_NO_PNG”,不依赖... 多线程调试DLL(/MDd) → libzint_MDd.lib

    win7下5.10.1静态编译成功后的静态链接库(MT和MTd)

    静态链接库包括MT和MTd两种类型,它们是Microsoft Visual C++编译器的不同多线程运行时库选项。在这里,“MT”代表“MultiThreaded”,用于非调试版本,而“MTd”则是“MultiThreaded Debug”,专为调试版本设计。 ...

    C++ VS2019 编译的protobuf3.11.4 MT版和MD版

    在本文中,我们将深入探讨如何在Visual Studio 2019环境下使用C++编译protobuf 3.11.4库,包括MT(多线程)和MD(多线程DLL)版本。protobuf是Google开发的一种高效、灵活的序列化框架,广泛应用于数据存储、网络...

    teigha官方示例(C#/cad/dwg/dxf)

    md, mt - Visual Studio 编译器选项(静态库); dbg - 表示存在调试信息(/mtd、/mdd 等); rwd - 包含调试信息的发布版本(用于重现某些类型的运行时问题); amd64 - 为 x86 AMD64 平台构建的库。 TD_CHM_Docs ...

    VC- Project Setting-Debug-Project Option语法解释

    接着,`/MT` 和 `/MTd` 类似于 `/MD` 和 `/MDd`,但链接的是多线程静态版本的LIBCMT.LIB和LIBCMTD.LIB。这种方式下,运行时库包含在最终可执行文件中,使得程序独立运行,但可能导致文件较大且更新运行时库更复杂。 ...

    转载:已编译好的openssh库

    中的"/MD"修改为"/MT"。然后重新编译安装OpenSSL即可。 四、附录:在VC中对C/C++ 运行时库不同版本编译指令说明 《在VC中对C/C++ 运行时库不同版本编译指令说明》...

    VS2010编译的libcurl_openssl_zlib可直接使用的32位静态库

    **/MT 和 /MTd** 是Visual Studio的编译选项,用于链接静态版本的C运行时库。选择这两个选项时,libcurl库会将所需的运行时库代码包含在内,使得生成的可执行文件不依赖于外部的msvcrt.dll,因此可以在没有安装...

    选择正确的C/C++ Runtime Library

    4. 多线程DLL调试版(/MDd):这是/MD版本的调试版本,用于开发和调试阶段。 需要注意的是,C++运行时库依赖于C运行时库。因此,C和C++运行时库的版本必须相匹配。这些选项同时适用于C和C++运行时库。 在旧版本的...

    关于Debug_release的区别

    Debug 版本使用 /MDd /MLd 或 /MTd 编译选项,使用 Debug runtime library(调试版本的运行时刻函数库),关闭优化开关,打开编译调试代码开关,创建 Edit and continue(编辑继续)数据库,帮助捕获内存错误,打开...

    VC下jsoncpp的使用入门

    3. **选择编译类型**:在编译jsoncpp的库文件时,需要根据实际情况选择编译模式,例如Debug或Release版本,以及是否使用动态运行时库(/MD或/MDd)还是静态运行时库(/MT或/MTd)。 - **/MD** 和 **/MDd**:表示...

    protobuf3.3.0静态包vs2013编译,MD运行库

    google是头文件,里面有32和64位相关静态库的debug和release版本以及编译proto文件的protoc.exe,运行时库是MD和MDd,官方默认是MT和MTd

    将opencv项目改为静态调试1

    1>IlmImfd.lib(ImfTiledRgbaFile.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(COLOR2Gray.obj 中) ``` 这个错误表明你的项目和OpenCV库之间的...

    C++日志类libglog使用

    建议使用MDd和MD方式,带上对应的dll(在glog\bin目录,需要时拷贝到bin文件输出目录)可以避免使用MTd,MT引起的内存泄露是值得的。 #include #include using namespace std; //包含glog头文件,建议放在stdafx....

    VC Debug 和 Release的区别

    在 Debug 版本中,有一些重要的编译选项,例如 /MDd /MLd 或 /MTd,它们使用 Debug Runtime Library,这个库包含调试信息,并且有助于发现错误。/Od 选项关闭优化开关,/D "_DEBUG" 选项等同于 #define _DEBUG,打开...

Global site tag (gtag.js) - Google Analytics