5

VS2012的静态链接版好像有问题。每当使用流时,在旧系统上启动控制台应用程序都会导致异常,尽管新系统根本不会引起任何问题。要重现此错误,足以

  • 在 VS2012 中新建一个控制台应用程序
  • 添加行std::ofstream f;std::cout << "Hello World";在主函数中(根据需要包括 fstream 或 iostream)
  • 切换到 v110_xp 工具集(如果 Windows XP 需要)
  • 切换到静态链接库 (/MT)
  • 在旧系统上启动 exe 总是有异常。

使用 ofstream 或 cout 删除行总是可以解决问题。切换到动态链接的运行时库 (/MD) 始终可以解决问题。在 ofstream 的情况下,使用大小优化 (/O1) 或不优化 (/Od) 代替速度优化 (/O2) 可以解决问题。

有没有人有想法或提示?提前致谢。

4

1 回答 1

2

自己解决 - 我的第一个假设是错误的:

Visual Studio 2012默认使用SSE2指令。这会导致不支持 SSE2 的旧系统(例如 Intel Pentium III 或 AMD Athlon XP)出现问题。抛出无效指令异常。您可以使用编译器选项切换 SSE2 。/arch:IA32

动态链接的 msvcrt (DLL) 在所有情况下都可以工作,因为它不受/arch编译器选项的影响。

于 2013-09-12T22:59:55.167 回答