繁体   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