2011-08-25 100 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上查到,但沒有點擊。

我不會養成通過自動生成的文件翻找的習慣,所以我從來沒有質疑這可能是問題所在。