[英]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.