奇怪的链接错误 - LNK1224:无效的图像库

时间:2011-08-25 18:57:09

标签: visual-c++ linker-errors porting lnk2005 visual-studio-97

我在将一个非常古老的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”的定义,因此它们发生冲突。 Microsoft在http://support.microsoft.com/kb/q148652/中提供了2个详细解决方案。其中一个是确保在所有文件中首先包含MFC标题(afx stuff)。那么这个项目中大约有100个文件,我只是厌倦了试图找到包含错误顺序资源的文件。所以我选择了另一个基本上强制库以特定顺序加载的解决方案。基本上你必须告诉编译器忽略一个特定的库,这样你就可以按照你选择的顺序明确加载它。就我而言,它是nafxcw.lib。

所以在项目属性下 - >链接器 - >输入,我明确地忽略了nafxcw.lib,然后明确地将它包含在列表的前面。

Properties window

这样做之后,我的LNK2005错误就消失了。但他们被一个单一链接错误所取代。

error LNK1224: invalid image base 0x287600000

我不知道我是否正确修复了以前的链接错误,这个新链接错误实际上是我必须处理的下一件事,或者我只是创建了一个更关键的链接错误,基本上是在停止链接过程之前它得到我原来的LNK2005错误。在任何一种情况下,我都无法找到有关此错误的信息。微软在此链接中没有多说http://msdn.microsoft.com/en-us/library/3ya3f8wz%28v=vs.80%29.aspx

  

您为图像指定了无效的基址。基址必须是64KB对齐(后四个十六进制数字必须为零),图像库必须符合32位有符号或无符号值。

这对我来说并不是那么有用,似乎没有其他线索可以解决这个问题的来源。我不知道下一步是什么。

1 个答案:

答案 0 :(得分:0)

好的,所以看起来我已经解决了我自己的问题。这就是我做的。我需要知道这个号码来自哪里,所以我只是用Notepad ++来搜索所有找到“2876”的项目文件,我从错误信息“LINK:致命错误LNK1224:无效的图像库0x287600000 ”。我发现在项目文件(.vcxproj)中有以下条目:

<BaseAddress>0x287600000</BaseAddress>

所以我把它打开然后坐在那里想知道这个数字是怎么回事。我的意思是我甚至不知道这个领域是什么。我甚至没有生成这个文件,M $成功了。为什么IDE会错误地创建自己的输入文件?无论如何,当我试图谷歌这个“BaseAddress”项来弄清楚它是什么时,我突然意识到它看起来有太多的零。所以我回过头来计算并确定,这不是一个32位的数字,它是一个36位的数字。删除其中一个零,重新编译,并繁荣它的工作。低,看哪,这就是我在问题陈述中提到的定义,暗示早先在MSDN上查了一下,但没有点击。

我不习惯经常浏览自动生成的文件,所以我从不质疑这可能是问题所在。