为什么MSCVRT库在链接时会产生冲突? 我在Visual C++ 2008中构建了一个项目,它是一个基于MFC的应用程序,它将为我将在我自己的项目中使用的静态C++类库提供应用程序。在构建调试配置时,我得到以下信息:

为什么MSCVRT库在链接时会产生冲突? 我在Visual C++ 2008中构建了一个项目,它是一个基于MFC的应用程序,它将为我将在我自己的项目中使用的静态C++类库提供应用程序。在构建调试配置时,我得到以下信息:,c++,visual-studio,linker,msvcrt,C++,Visual Studio,Linker,Msvcrt,警告LNK4098:defaultlib'MSVCRT'与其他lib的使用冲突;使用/NODEFAULTLIB:library 使用推荐的选项后(通过在调试配置的项目链接器设置中的“忽略特定库”字段中添加“msvcrt”),程序链接并运行良好。但是,我想知道为什么会发生这种冲突,为什么我必须忽略一个关键的库,如果我希望以后会出现问题,我会添加忽略,或者如果我不添加,会发生什么(因为程序无论如何都会生成) 同时,发布配置警告: 警告LNK4075:由于“/OPT:ICF”规范而忽略“/EDITAN

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

使用推荐的选项后(通过在调试配置的项目链接器设置中的“忽略特定库”字段中添加“msvcrt”),程序链接并运行良好。但是,我想知道为什么会发生这种冲突,为什么我必须忽略一个关键的库,如果我希望以后会出现问题,我会添加忽略,或者如果我不添加,会发生什么(因为程序无论如何都会生成)

同时,发布配置警告:

警告LNK4075:由于“/OPT:ICF”规范而忽略“/EDITANDCONTINUE”
警告LNK4098:defaultlib'msvctd'与其他lib的使用冲突;使用/NODEFAULTLIB:library

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

错误LNK2001:未解析的外部符号\uuuu imp\uuuuuuu CrtDbgReportW


非常感谢任何见解。

这通常发生在我(无意中)混合不同风格的RTL时,比如(在您的案例中)调试和发布或MT和ST。

这通常发生在您链接到使用另一版本VC++运行时的静态库时(
C++->code Generation->Runtime Library
项目属性中的设置)。

两种配置都使用“多线程DLL(/MD)”运行时的变体。或者你的意思是其他吗?@neuviemeporte:请参阅sharptooth的答案,了解如何仍然会发生这种情况。我在两种配置中都选择了/MDd,并且警告都消失了,我猜库是用RT的调试版本构建的。仍然想知道为什么MSVCRT最终成为调试构建的默认版本,而MSVCRTD是R的默认版本elease.在我看来,这两个版本的默认值都应该是MSVCRTD?也许这是库开发人员的错误。调试应该只用于调试版本-速度要慢得多。也有这个问题,谢谢帮助。