c++ 运行时库选项

c++ Runtime Library Options

本文关键字:选项 运行时 c++      更新时间:2023-10-16

运行时库/MTd/MT等是什么意思?

阅读 http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.71).aspx,并没有说服我。

我必须使用第三方项目,该项目的所有"发布"均为"/MD",所有"调试"均为"/MDd"。我的所有项目(其他人使用,所以我无法更改)都有"/MT"和"/MTd"。

我必须将该第三方项目中的库作为输入添加到我的项目中。为了避免链接器错误,我更改了该项目中的设置以匹配我的项目。

我这样做了,没有理解其中的含义。

我的项目构建,似乎可以工作(还没有使用很多功能),但是原始项目中的可执行文件将不再构建,存在诸如

error C1189: Please use the /MD switch for _AFXDLL builds   c:Program Files (x86)Microsoft Visual Studio 10.0VCatlmfcincludeafxver_.h

所以。。。我不知道如何使一切正常,或者我的更改意味着什么。

我可以以某种方式组合/MD 和/MT 库吗?我必须做什么才能使这两个项目都正常工作?

/MD标志隐式定义与/MT相同的信息 - plus 指定您使用的是运行时库的 DLL 版本。

/MT/MD标志基本上都说使用运行时库的多线程版本 - 不同之处在于/MD说使用基于 DLL 的版本,而/MT库中静态链接。

所有带有额外d的标志都是调试版本 - 所以/MDd说使用基于 DLL 的多线程运行时库的调试版本。

您的问题中没有太多关于什么不会导致失败的项目无法正常工作的细节。 如果将所有内容切换为使用/MD,则需要将运行时 DLL 与项目一起包含在内,这可能是它们现在失败的原因。 (以前,使用/MT时,它们将静态链接到您的项目。

附带说明一下 - VS 2010 版本中标志的文档很容易理解。 该语言在后来的文档版本中得到了极大的简化,尽管标志的含义没有改变。 查看 2010 年笔记而不是您链接的 VS 2003 文档可能会让您更容易理解。