突发事件应对法分几类:error LNK2001:无法解析的外部符号___argc

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 15:27:48

"错误 LNK2001: 无法解析的外部符号 ___argc":

MFC 库和CRT 库的静态/动态版本或调试/发布版本不匹配

症状

当 MFC 和 CRT (C 运行时)库在静态/动态链接或bebug\release模式不匹配的时候,会出现如下所示错误:

nafxcwd.lib(appcore.obj): 错误 LNK2001: 无法解析的外部符号 ___argc

其他奇怪的许多问题可能会在生成或运行时期间爆发: 内存损坏、 内存泄漏等从debug C run-timr libary 中弹出的警告。

原因

当生成 MFC 应用程序或 DLL 时, 您需要确保所有相关的库均保持同步:

        · 如果您已经选择了在共享库中使用 MFC 构建应用程序,则必须也使用动态版本的 C 运行库 (MSVCRT.DLL)。

        · 如果您已经选择了生成 debug版MFC 应用程序,然后还必须使用调试版本的C 运行时库。同样,release版本的 MFC 应用程序必须使用非调试版本的C 运行时库。

         · 如果您生成的debug版本的MFC 应用程序使用了扩展 dll,每个扩展 DLL 必须是调试版本。同样,release程序必须匹配的release版本的扩展 dll。C 运行时库的类型是固定的,使用该运行库的应用程序和dll必须使用共享库MFC。

    · 如果要还链接到使用了MFC 或 CRT 的任何静态库,应该确保每个静态库与应用程序在debug/release,动态/静态CRT上有相同的属性

解决方案

修改应用程序或 DLL 使用的 C 运行时库的类型;在Build/Project 属性表中,切换到 C/c + + 选项卡,选择"代码生成"类别。 更改列表框中的值。

 

MDd(multithread debug dll): debug,共享库 MFC 应用程序库。
MD(multithread dll): release,共享库 MFC 应用程序库。
MTd(mulithread debug):debug,静态库 MFC 应用程库。
MT(multithread):release,静态库的 MFC 应用程序库。