4

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

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

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

同时,Release 配置警告:

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

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

错误 LNK2001:未解析的外部符号 __imp___CrtDbgReportW

任何见解都非常感谢。

4

2 回答 2

3

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

于 2010-03-31T13:50:37.467 回答
0

当我(无意中)混合不同风格的 RTL 时,这通常发生在我身上,比如(就像你的情况一样)调试和发布或 MT 和 ST。

于 2010-03-31T13:47:36.200 回答