c ++运行时库选项

时间:2012-10-18 17:09:20

标签: c++ dll runtime static-libraries

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库吗?我需要做些什么来使两个项目都有效?

1 个答案:

答案 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文档。