发布版本中的Visual C ++ 6编译错误

时间:2013-09-27 21:18:37

标签: c++ compiler-errors windows-7-x64 visual-studio-6

我可以使用Windows 7 64位上的所有服务包在Visual C ++ 6.0的非Unicode调试模式下编译我的32位ATL项目(COM库)。它在两种情况下都可以正常工作:如果正常运行或以管理员身份运行。

但非Unicode发布版本失败。

对于初学者来说,VC ++编译器无法找到包含文件(例如schannel.h,它位于另一个文件夹中,因为它属于Platform SDK)。在Release版本中,编译器只扫描了VC ++本身的核心Include文件夹(尽管在Options中指定了Platform SDK的文件夹,但无论如何在调试模式下都没有问题)。我试图将包含文件从SDK复制到Program Files(x86)之外的某个位置,因为我认为VC ++ 6.0可能不足以解决UAC问题(并且无法以某种方式访问​​包含在原始受限位置)但它没有救命。最后,我将编译器无法找到的所有文件复制到VC ++本身的Include文件夹中,让我继续前进。

现在编译器以一种新的方式抱怨(只是几个例子): C:\ Program Files(x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):错误C2143:语法错误:缺少';'在'*'之前 C:\ Program Files(x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):错误C2501:'CMSG_SIGNER_INFO':缺少存储类或类型说明符 C:\ Program Files(x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):错误C2501:'psSignerInfo':缺少存储类或类型说明符

但是错误日志不再包含任何“找不到文件”或类似的内容。这些错误看起来很像“未找到文件”的症状,但这只是猜测。无论如何,我将Platform SDK的完整include文件夹复制到VC ++ Include文件夹,但它没有帮助。

再次,Debug构建就好了。然后,我开始比较我正在使用的Debug和Release MinDependency非unicode构建的编译和链接选项,最后使它们相同。

我发现推动VC ++疯狂的唯一因素是它在结果文件中放置的调试信息量。

简而言之。如果我用/ Zl开关编译(程序数据库编辑并继续),它可以工作。其他一切都失败了(包括程序数据库)。

早些时候,当我使用Win XP时,我没有遇到过这样的问题。是否仍然可以在Win7 64位上使用旧的VC ++ 6.0?我迫切需要旧的VC ++,因为新的VC ++有太多的兼容性问题(我也有VS 2008,一切都很好,但即使它在MinDependency中链接,生成的.DLL也不适用于一些非常旧的系统)。

我的猜测是,当使用/ Zl开关时,VC ++甚至可能使用不同的编译器。但这只是一个疯狂的猜测,无论如何我不知道如何检查这个以及接下来该做什么。有线索吗?

1 个答案:

答案 0 :(得分:0)

Phew,终于明白了!在Options / Directories中的每个路径都添加了额外的空间,它阻止VC ++找到一些include或lib文件(这发生在不同的系统上,XP和Seven,也许,在复制/粘贴目录路径期间添加空间是典型的事情)。有趣的是,VC ++在这方面不一致,并且更改构建模式可能会激活编译器中的不同代码路径 - 某些路径会修剪目录名称,而其他路径则不会。