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

标签 c++ compiler-errors windows-7-x64 visual-studio-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++ 在这方面是不一致的,并且更改构建模式可能会在编译器中激活不同的代码路径——一些路径会修剪目录名称,而另一些则不会。

关于c++ - 发布版本中的 Visual C++ 6 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060222/

相关文章:

c# - 调用 COM 组件返回错误 HRESULT E_FAIL

c++ - 在 Qt 中使用 += 运算符时出错

windows-7-x64 - QT Creator 5.4 中的 QVTKWidgetPlugin

performance - 有什么方法可以在 PostgreSQL 中使用 >1 Core 进行单个连接/查询?

Matlab 2014b 和 mex 文件,有人能够使用 Visual Studio Express 吗?

C++ 对象模型转换?

c++ - 将多个 std::collections 输出到 CSV/row 第一次迭代的函数

c++ - 使用 boost 的源特定多播

C# .NET 1.1 - 生成后事件超出 .csproj 文件的编译器限制

java - 错误 java.lang.NoSuchMethodError : No static method