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

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

但非 Unicode Release 构建失败。

对于初学者,VC++ 编译器无法找到包含文件(例如 schannel.h,它位于另一个文件夹中,因为它属于 Platform SDK)。编译器在发布版本中仅扫描了 VC++ 本身的核心包含文件夹(尽管平台 SDK 的文件夹是在选项中指定的,并且无论如何在 Debug模式下都没有问题)。我试图将包含文件从 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 的完整包含文件夹复制到 VC++ 包含文件夹,但它没有帮助。

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

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

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

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

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

最佳答案

呼,终于明白了!不知何故,额外的空间被添加到选项/目录中的每个路径,它阻止了 VC++ 找到一些包含或 lib 文件(这发生在不同的系统上,XP 和 7,也许,在目录路径的复制/粘贴过程中添加空格是典型的事物)。有趣的是,VC++ 在这方面是不一致的,并且更改构建模式可能会在编译器中激活不同的代码路径——一些路径会修剪目录名称,而另一些则不会。

https://stackoverflow.com/questions/19060222/

相关文章:

c++ - C++中的运行时错误字符串声明

c# - C#在数学表达式中使用未分配的变量

ios - drawRect :中的EXC_BAD_ACCESS

java - 编写一个程序,询问产品代码,产品数量并汇总所有价格

java - 在PHP中获取Java编译错误

c++ - 没有匹配的函数用于调用c++

c# - 编译内容项目时出错

java - 错误 :class interface or enum expected

java - 在其他类中访问主类中的公共(public)变量

c++ - Count.h :10:5: error: ISO C++ forbids declar