【发布时间】:2013-09-14 17:52:35
【问题描述】:
VS2012的静态链接版本好像有问题。每当使用流时,在旧系统上启动控制台应用程序都会导致异常,尽管新系统根本不会引起任何问题。 要重现此错误,足以
- 在 VS2012 中创建一个新的控制台应用程序
- 在主函数中添加
std::ofstream f;或std::cout << "Hello World";行 (根据需要包括 fstream 或 iostream) - 切换到 v110_xp 工具集(如果 Windows XP 需要)
- 切换到静态链接库 (/MT)
- 在旧系统上启动 exe 总是有例外。
删除带有 ofstream 或 cout 的行总能解决问题。 切换到动态链接的运行时库 (/MD) 始终可以解决问题。 在 ofstream 的情况下,使用大小优化 (/O1) 或不优化 (/Od) 代替速度优化 (/O2) 即可解决问题。
有人有想法或提示吗?提前致谢。
【问题讨论】:
-
您是否尝试过在 Windows XP 上的调试器下运行该应用程序以查明发生访问冲突的位置?如果您没有在 Windows XP 上安装 Visual Studio,您可以设置 Remote Debugging。 Visual Studio 附带其 CRT 实现的源代码。确保将目录添加到 VC++ 目录。
-
@IInspectable:感谢远程调试的想法。我会试试的,但是用 VS2012 和 XP 进行远程调试似乎并不容易:Can I use the Visual Studio 2010 remote debugger on Windows XP to debug a .Net 4.0 app from Visual Studio 2012?
-
@IInspectable:远程调试不适用于 Visual Studio 2012 和 Windows XP。 Visual Studio 2012 远程调试器需要“更新版本的 Windows”。我尝试安装 Visual Studio 2010 远程调试器并尝试从 Visual Studio 2012 进行连接 - 但没有成功。
-
这基本上是我从你链接到的问题的链接中得到的。看来您需要 Visual Studio 2010 才能连接到 Windows XP 机器。虽然您可以在同一台机器上并排安装 VS 2010 和 VS 2012,但这肯定不太理想,即使您可以使用 VS 2010 调试基于 VS 2012 构建的应用程序。微软似乎完全低估了 XP 安装的数量仍在使用中。
标签: c++ visual-studio-2012 cpu-architecture msvcrt sse2