C++ c++;运行库选项

C++ c++;运行库选项,c++,dll,runtime,static-libraries,C++,Dll,Runtime,Static Libraries,运行库/MTd/MT等的含义是什么 阅读并没有说服我 我必须使用一个第三方项目,它的所有“Release”都是“/MD”,所有“Debug”都是“/MDd”。我所有的项目(其他人使用,所以我不能更改)都有“/MT”和“/MTd” 我必须将第三方项目中的库作为输入添加到我的项目中。为了避免链接器错误,我已更改该项目中的设置以匹配我的项目 我这样做了,但没有理解其中的含义 我的项目版本似乎可以正常运行(尚未使用很多功能),但原始项目中的可执行文件将不再生成,出现如下错误 error C1189: P

运行库/MTd/MT等的含义是什么

阅读并没有说服我

我必须使用一个第三方项目,它的所有“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库?要使这两个项目都工作,我必须做些什么?

/MD
标志隐式定义了与
/MT
相同的信息,并指定您正在使用运行库的DLL版本

/MT
/MD
标志基本上都表示使用运行库的多线程版本-区别在于
/MD
表示使用基于DLL的版本,而
/MT
静态链接库中

所有带有额外
d
的标志都是调试版本-因此
/MDd
表示使用基于DLL的多线程运行库的调试版本

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


另一方面,的文档更容易理解。在以后的文档版本中,该语言被大大简化,尽管标志的含义没有改变。看看2010年的笔记,而不是你链接的VS 2003文档,可能会让你更容易理解。

好吧,经过一段时间的实验,我简直不知道如何不更改原始项目的开关。我得到了“defaultlib'msvcrdt'与其他lib的使用冲突;use/NODEFAULTLIB:library”作为警告,以及大约50个链接错误,这些错误表示“gbump”和我的项目(或libcpmtd.lib或其他)中已经定义的其他有趣名称。所以看来我别无选择。。。这让我回到了原来的问题:引用你的答案:我如何在我的项目中包含运行时DLL?@Mihaela如果你要使用DLL版本链接库,你需要将原始项目更改为使用DLL版本。否则,这将永远是个问题。