Кажется, есть проблема в статически связанной версии VS2012. Запуск консольного приложения в старой системе приводит к исключению всякий раз, когда используются потоки, хотя новые системы не вызывают никаких проблем.
Чтобы воспроизвести эту ошибку, достаточно
std::ofstream f;
или же std::cout << "Hello World";
в основной функцииУдаление строки с ofstream или cout всегда решает проблему.
Переключение на динамически связанные библиотеки времени выполнения (/ MD) всегда решает проблему.
В случае использования потока, оптимизация по размеру (/ O1) или отсутствие оптимизации (/ Od) вместо оптимизации по скорости (/ O2) решили проблему.
У кого-нибудь есть идея или подсказка? Заранее спасибо.
Решил сам — мое первое предположение было неверным:
Visual Studio 2012 использования SSE2 инструкции по умолчанию. Это вызывает проблемы на старых системах, таких как Intel Pentium III или AMD Athlon XP, которые не поддерживают SSE2. Недопустимое исключение инструкции выдается.
Вы можете переключить SSE2, используя /arch:IA32
опция компилятора.
Динамически связанная msvcrt (DLL) работает во всех случаях, так как на нее не влияют /arch
опция компилятора.
Других решений пока нет …