2011-08-25 80 views
1

我有一些真正的困难,将一个非常古老的Visual Studio 97 C++项目移植到Visual Studio 2010中。让我首先给出一些背景,到这个新的LNK1224错误,因为它们可能是相关的,但我不确定。奇怪的链接错误 - LNK1224:无效的图像库

在此之前我的新的错误,我收到此错误:

error LNK2005: "void __cdecl operator delete(void *)" ([email protected]@Z) already defined in LIBCMT.lib(delete.obj) nafxcw.lib(afxmem.obj) 

通过一些挖我发现这个错误的原因是因为无论是MFC和CRT库包含“新”和“删除定义“所以他们碰撞。微软在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

You specified an invalid base address for the image. Base addresses must be 64KB aligned (the last four hex digits must be zero) and image base must fit within a 32-bit signed or unsigned value.

这是不是所有对我很有帮助,而且似乎没有其他的线索,在那里这个问题的来源。我不知道下一步是什么。

回答

0

好吧,看起来我已经解决了我自己的问题。这是我做的。我需要知道这个号码来自哪里,所以我只是用记事本++来搜索所有项目文件,寻找“2876”,我从错误消息“LINK:fatal error LNK1224:invalid image base 0x287600000 ”。我发现,在项目文件(.vcxproj)曾在它下面的条目:

<BaseAddress>0x287600000</BaseAddress> 

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

我不会养成通过自动生成的文件翻找的习惯,所以我从来没有质疑这可能是问题所在。