簡體   English   中英

從VC6遷移到VC9的編譯問題

[英]Compilation issues for Migration from VC6 to VC9

我正在將舊版C ++系統從VC6移植到VC9。

應用程序( <APP A>)靜態鏈接到內部應用程序<APP B> (內部開發,但由單獨的團隊開發)。 來自<APP B>的頭文件的本地副本包含在CPP文件中,並在<APP A>.編譯<APP A>.

當前,我們不打算將<APP B>遷移到VC9。 盡管<APP A><APP B>都將使用單獨的CRT,但是不會出現沖突。

我們面臨的問題是VC9無法編譯來自(本地副本為)中的包含文件。

嚴重錯誤C1083:無法打開包含文件:iostream.h:沒有此類文件或目錄

可能的解決方案:如果我在<APP A>本地副本中進行更改並使用VC9進行編譯,則不確定在運行時是否會引起某些問題。

還有其他方法可以要求VC9使用<iostream.h>而不是<iostream>編譯<APP A>文件嗎?

抱歉,您遇到了很多問題。

首先是基礎知識: <iostream.h>是一個較舊的Microsoft標頭,用於定義例如::cout <iostream>是Standard標頭,並定義例如std::cout 您可以使用這兩個的,但是這頭應該包括在APP.H <iostream>不會定義要在聲明中使用的類型。 大概您依賴VC6實現的工件,即<iostream.h> <istream.h><istream.h><ostream.h> 你可能想切換到<iosfwd>相反,其目的在標題中使用。

但是,更大的問題是您假設即使將“ APP A”和“ APP B”都用VC6和VC9編譯,也可以將它們鏈接在一起。 只有當它們共享一個extern "C" API時,這才是正確的。兩者之間的修改是有意不同的,並且由於您提到的是<iostream.h>而不是<stdio.h> ,所以我將假定您的共同點是真正的C ++。

邁克爾·費瑟斯(Michael Feathers)有一本很棒的書,是關於這類項目的。http: //www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052。

簡短的答案是,如果您有測試,請進行必要的更改和重構,然后重新運行測試。 對於您的示例,我將使用預處理程序指令根據編譯器版本選擇正確的包含,然后修復所有損壞的測試。

沒有測試,您會遇到更多麻煩,要么編寫它們,要么祈禱您什么都不會破壞

我懷疑此編譯器錯誤將是唯一​​的問題。 更新編譯器幾乎總是會帶來少量問題。 最好解決這些沖突並認真測試結果。 我不認為某些“解決方法”將減少麻煩,因為無論如何編譯器都是不同的。

當並行使用不同的編譯器時,解決此類問題的唯一解決方案是條件編譯,例如:

#if _MSC_VER >= 1200 
   // Code for VC 6.0 or higher goes here
#endif

請注意, _MSC_VER與Visual Studio版本號不同。 對於Visual Studio 2010,即_MSC_VER定義為1600。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM