为什么MSCVRT库在链接时会产生冲突?

时间:2010-03-31 13:43:44

标签: c++ visual-studio linker msvcrt

我正在Visual C ++ 2008中构建一个项目,这是一个基于MFC的示例应用程序,用于我将很快在我自己的项目中使用的静态C ++类库。在构建Debug配置时,我得到以下内容:

  

警告LNK4098:defaultlib'MSVCRT'与使用其他lib冲突;使用/ NODEFAULTLIB:库

使用推荐选项后(通过将“msvcrt”添加到Debug配置的项目链接器设置中的“忽略特定库”字段),程序链接并运行正常。但是,我想知道为什么会发生这种冲突,为什么我必须忽略一个关键库,如果我以后会遇到问题,我会添加忽略,或者如果我不这样做会发生什么(因为程序建立无论如何)。

同时,Release配置会发出警告:

  

警告LNK4075:由于'/ OPT:ICF'规范而忽略'/ EDITANDCONTINUE'   警告LNK4098:defaultlib'MSVCRTD'与使用其他库冲突;使用/ NODEFAULTLIB:库

我猜测“D”后缀意味着这是vc ++运行时的调试版本,不知道为什么这次使用它。无论如何,将“msvcrtd”添加到ignore字段会导致表单中的大量链接错误:

  

错误LNK2001:未解析的外部符号__imp ___ CrtDbgReportW

非常感谢任何见解。

2 个答案:

答案 0 :(得分:3)

当您使用另一个版本的VC ++运行时(项目属性中的C++ ->Code Generation->Runtime Library设置)链接静态库时,通常会发生这种情况。

答案 1 :(得分:0)

当我(无意中)混合不同风格的RTL时,这通常发生在我身上,就像(在你的情况下似乎是)Debug和Release或MT和ST一样。