2013-09-10 36 views
5

VS2012的靜態鏈接版本似乎存在問題。在舊系統上啓動控制檯應用程序會導致異常,無論何時使用流,儘管新系統根本沒有問題。 要重現此錯誤就足夠了使用Visual Studio 2012進行靜態鏈接的msvcrt的例外

  • 在VS2012
  • 添加行std::ofstream f;std::cout << "Hello World";在主函數 創建一個新的控制檯應用程序(包括fstream的或的iostream根據需要)
  • 開關v110_xp工具集(如果Windows XP需要)
  • 切換到靜態鏈接庫(/ MT)
  • 在舊系統上啓動exe 總是存在一個exceptio ñ。

使用ofstream或cout刪除行總是可以解決問題。 切換到動態鏈接運行時庫(/ MD)總是可以解決問題。 在ofstream的情況下,使用尺寸優化(/ O1)或不優化(/ Od)而不是速度優化(/ O2)解決了問題。

有沒有人有想法或提示?提前致謝。

+0

您是否曾嘗試在Windows XP的調試器下運行該應用程序以找出訪問衝突發生的位置?如果您沒有在Windows XP上安裝Visual Studio,則可以設置[遠程調試](http://msdn.microsoft.com/en-us/library/vstudio/y7f5zaaa.aspx)。 Visual Studio附帶CRT實現的源代碼。確保將目錄添加到* VC++目錄*。 – IInspectable

+0

@IInspectable:感謝遠程調試的想法。我會嘗試一下,但是使用VS2012和XP進行遠程調試似乎並不容易:[我可以在Windows XP上使用Visual Studio 2010遠程調試器從Visual Studio 2012調試.Net 4.0應用程序嗎?](http:// stackoverflow .com/questions/14444055/can-i-use-the-visual-studio-2010-remote-debugger-on-windows-xp-to-debug-a-net-4) – user2766445

+0

@IInspectable:遠程調試不起作用與Visual Studio 2012和Windows XP。 Visual Studio 2012遠程調試器需要「更新版本的Windows」。我試圖安裝Visual Studio 2010遠程調試器,並嘗試從Visual Studio 2012進行連接 - 這不起作用。 – user2766445

回答

2

解決了自己 - 我的第一個假設是錯誤的:

的Visual Studio 2012使用SSE2指令通過默認。這會給諸如不支持SSE2的Intel Pentium III或AMD Athlon XP等舊系統帶來麻煩。引發無效的指令異常。 您可以使用/arch:IA32編譯器選項切換SSE2。

動態鏈接的msvcrt(DLL)在所有情況下都能正常工作,因爲它不受/arch編譯器選項的影響。

相關問題