2013-09-10 19 views
5

Wygląda na to, że problem występuje w statycznie połączonej wersji VS2012. Uruchomienie aplikacji konsolowej na starym systemie prowadzi do wyjątku, ilekroć używane są strumienie, chociaż nowe systemy nie powodują żadnych problemów. Aby odtworzyć ten błąd, wystarczyWyjątek w statycznie połączonym pliku msvcrt przy użyciu programu Visual Studio 2012

  • utworzyć nową aplikację konsoli w VS2012
  • dodać linię std::ofstream f; lub std::cout << "Hello World"; w głównej funkcji (m.in. fstream lub IOStream jako wymagane)
  • przełącznik v110_xp zestaw narzędzi (jeśli jest wymagany w przypadku Windows XP)
  • przejście do statycznie połączonych bibliotek (/ MT)
  • Uruchomienie exe na starym systemie Zawsze jest wyjątek n.

Usunięcie linii z kanału lub cout zawsze rozwiązuje problem. Przejście do dynamicznie połączonych bibliotek środowiska wykonawczego (/ MD) zawsze rozwiązuje problem. W przypadku przepływu, użycie optymalizacji rozmiaru (/ O1) lub brak optymalizacji (/ Od) zamiast optymalizacji prędkości (/ O2) rozwiązało problem.

Czy ktoś ma pomysł lub podpowiedź? Z góry dziękuję.

+0

Czy próbowałeś uruchomić aplikację pod debuggerem w systemie Windows XP, aby dowiedzieć się, gdzie doszło do naruszenia zasad dostępu? Jeśli nie masz zainstalowanego Visual Studio w systemie Windows XP, możesz skonfigurować [Zdalne debugowanie] (http://msdn.microsoft.com/en-us/library/vstudio/y7f5zaaa.aspx). Visual Studio jest dostarczane z kodem źródłowym do implementacji CRT. Upewnij się, że dodasz katalog do * VC++ Directories *. – IInspectable

+0

@IInspectable: Dzięki za pomysł zdalnego debugowania. Spróbuję, ale zdalne debugowanie za pomocą VS2012 i XP wydaje się niełatwe: [Czy mogę użyć zdalnego debugera Visual Studio 2010 w Windows XP do debugowania aplikacji .NET 4.0 z Visual Studio 2012?] (Http: // stackoverflow .pl/questions/14444055/can-i-use-the-visual-studio-2010-remote-debugger-on-windows-xp-to-debug-a-net-4) – user2766445

+0

@IInspectable: Zdalne debugowanie nie działa z Visual Studio 2012 i Windows XP. Zdalny debuger Visual Studio 2012 wymaga "nowszej wersji systemu Windows". Próbowałem zainstalować zdalny debuger Visual Studio 2010 i próbowałem połączyć się z Visual Studio 2012 - które nie działało. – user2766445

Odpowiedz

2

rozwiązywane przez siebie - moje pierwsze założenie było błędne:

Visual Studio 2012 wykorzystuje SSE2 instrukcji domyślnie. Powoduje to problemy w starych systemach, takich jak Intel Pentium III lub AMD Athlon XP, które nie obsługują SSE2. Wypisano niepoprawny wyjątek instrukcji. Możesz zmienić SSE2 używając opcji kompilatora /arch:IA32.

Dynamicznie powiązane msvcrt (DLL) działa we wszystkich przypadkach, ponieważ nie ma wpływu na opcję kompilatora /arch.