我在将一个非常旧的 Visual Studio 97 C++ 项目移植到 Visual Studio 2010 时遇到了一些真正的困难。让我首先介绍一下在这个新的 LNK1224 错误之前我遇到的错误的一些背景,因为它们可能是相关的,但是我不知道。
在我出现新错误之前,我收到了这个错误:
error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj) nafxcw.lib(afxmem.obj)
通过一些挖掘,我发现这个错误的原因是因为 MFC 和 CRT 库都包含“new”和“delete”的定义,所以它们发生了冲突。微软为此提供了 2 个解决方案,详见http://support.microsoft.com/kb/q148652/。其中之一是确保在所有文件中始终首先包含 MFC 标头(afx 内容)。好吧,这个项目中有大约 100 个文件,我只是厌倦了试图找到包含错误顺序的资源的文件。所以我选择了另一个解决方案,它基本上是强制库以特定顺序加载。基本上,您必须告诉编译器忽略特定库,以便您可以按照您选择的顺序显式加载它。就我而言,它是 nafxcw.lib。
因此,在项目属性 --> 链接器 --> 输入下,我明确忽略了 nafxcw.lib,然后将其明确包含在列表的前面。
所以在这样做之后,我的 LNK2005 错误就消失了。但是它们被一个单一的链接错误所取代。
error LNK1224: invalid image base 0x287600000
我不知道我是否正确修复了以前的链接错误,而这个新的链接错误实际上是我接下来要处理的事情,或者我只是创建了一个更严重的链接错误,它基本上在链接过程到达之前停止了它我原来的 LNK2005 错误。无论哪种情况,我都找不到关于此错误的太多信息。微软在这个链接中没有说太多关于它http://msdn.microsoft.com/en-us/library/3ya3f8wz%28v=vs.80%29.aspx
您为图像指定了无效的基地址。基地址必须是 64KB 对齐的(最后四个十六进制数字必须为零),并且映像基址必须适合 32 位有符号或无符号值。
这对我来说并不是那么有帮助,而且似乎没有其他线索可以说明这个问题的来源。我不知道下一步是什么。