Runtime Library / MTd / MT等是什么意思?
阅读http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.71).aspx,并没有说服我。
我必须使用第三方项目,该项目包含所有"发布" as" / MD"及其所有"调试" as" / MDd"。我所有的项目(其他人使用,所以我无法改变)都有" / MT"和" / MTd"。
我必须将第三方项目中的库作为输入添加到我的项目中。为了避免链接器错误,我更改了该项目中的设置以匹配我的项目。
我这样做了,却没有理解其含义。
我的项目构建,似乎工作(尚未使用很多功能),但原始项目中的可执行文件将不再构建,存在错误,如
error C1189: Please use the /MD switch for _AFXDLL builds c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxver_.h
所以...我不知道如何让一切正常,或者我改变的含义是什么。
我可以以某种方式组合/ MD和/ MT库吗?我需要做些什么来使两个项目都有效?
答案 0 :(得分:3)
/MD
标志隐式定义与/MT
相同的信息 - 并指定您正在使用运行时库的DLL版本。
/MT
和/MD
标志基本上都表示使用运行时库的多线程版本 - 区别在于/MD
表示使用基于DLL的版本,而{{1在库中静态链接。
所有带有额外/MT
的标志都是调试版本 - 所以d
说要使用基于DLL的多线程运行时库的调试版本。
关于什么不会导致失败的项目无效,你的问题中没有很多细节。如果将所有内容都切换为使用/MDd
,则需要将运行时DLL与项目一起包含在内,这可能就是他们现在失败的原因。 (以前,使用/MD
,它们将与您的项目静态链接。)
另一方面 - flags in the VS 2010 version的文档更容易理解。在后来的文档发布中,语言得到了极大的简化,尽管标记含义没有改变。它可能会让您理解2010年的注释,而不是您链接的VS 2003文档。