2013-09-10 11 views
5

Sembra esserci un problema nella versione collegata in modo statico di VS2012. L'avvio di un'applicazione console su un vecchio sistema comporta un'eccezione, ogni volta che vengono utilizzati i flussi, anche se i nuovi sistemi non causano alcun problema. Per riprodurre questo errore è sufficienteEccezione in msvcrt linkato staticamente utilizzando Visual Studio 2012

  • creare una nuova applicazione console in VS2012
  • aggiungere la riga std::ofstream f; o std::cout << "Hello World"; nella funzione principale (includa fstream o iostream come richiesto)
  • interruttore v110_xp set di strumenti (se richiesto per Windows XP)
  • passare a librerie collegate staticamente (/ MT)
  • avviare l'exe su un vecchio sistema C'è sempre un'eccezione n.

Rimuovere la linea con ofstream o cout risolve sempre il problema. Il passaggio alle librerie di runtime collegate dinamicamente (/ MD) risolve sempre il problema. In caso di ofstream, l'ottimizzazione della dimensione (/ O1) o l'ottimizzazione (/ Od) anziché l'ottimizzazione della velocità (/ O2) hanno risolto il problema.

Qualcuno ha un'idea o un suggerimento? Grazie in anticipo.

+0

Hai provato a eseguire l'applicazione con un debugger su Windows XP per scoprire dove si sta verificando la violazione di accesso? Se non hai installato Visual Studio su Windows XP, puoi configurare [Remote Debugging] (http://msdn.microsoft.com/en-us/library/vstudio/y7f5zaaa.aspx). Visual Studio viene fornito con il codice sorgente per la sua implementazione CRT. Assicurati di aggiungere la directory alle * directory VC++ *. – IInspectable

+0

@IInspectable: grazie per l'idea del debug remoto. Ci proverò, ma il debugging remoto con VS2012 e XP sembra non essere facile: [Posso usare il debugger remoto di Visual Studio 2010 su Windows XP per eseguire il debug di un'app .Net 4.0 da Visual Studio 2012?] (Http: // StackOverflow .com/questions/14444055/can-i-use-the-visual-studio-2010-remote-debugger-su-windows-xp-to-debug-a-net-4) – user2766445

+0

@IInspectable: il debug remoto non funziona con Visual Studio 2012 e Windows XP. Il debugger remoto di Visual Studio 2012 richiede "una versione più recente di Windows". Ho provato a installare debugger remoto di Visual Studio 2010 e ho provato a connettermi da Visual Studio 2012, che non funzionava. – user2766445

risposta

2

risolto da me - la mia prima ipotesi era sbagliata:

Visual Studio 2012 utilizza SSE2 istruzioni di default. Ciò causa problemi su vecchi sistemi come Intel Pentium III o AMD Athlon XP, che non supportano SSE2. Viene generata un'eccezione di istruzioni non valide. È possibile passare da SSE2 utilizzando l'opzione del compilatore /arch:IA32.

Il msvcrt (DLL) collegato dinamicamente funziona in ogni caso, poiché non è interessato dall'opzione del compilatore /arch.