1

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

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

我必须使用一个第三方项目,它的所有“Release”都是“/MD”,所有“Debug”都是“/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 库吗?我必须做些什么才能使这两个项目都工作?

4

1 回答 1

3

/MD标志隐含地定义了与 - plus 相同的信息,/MT指定您正在使用运行时库的 DLL 版本。

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

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

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

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

于 2012-10-18T17:15:43.340 回答