Разве нельзя запускать скомпилированные приложения C ++ в Windows 95 и Windows NT 4.0? - PullRequest
1 голос
/ 16 января 2020

Всякий раз, когда я использую MinGW для компиляции приложений C ++, они корректно работают в современных версиях Microsoft Windows, включая Windows 2000 и Windows XP.

Однако, когда я пытаюсь запустить их на Windows 95 и Windows NT 4.0, я получаю следующие ошибки:

Означает ли это, что идея запуска скомпилированных приложений C ++ в этих версиях принципиально не поддерживается?

Примечание: я еще не тестировал Windows 98 и Windows ME.

Редактировать: Я тестировал Windows 98. тестирует сортировку визуализации работает правильно, но tetrisimplementation отображает пустую командную строку и не останавливается. Обе эти программы выдавали одну и ту же ошибку, приведенную выше в Windows 95 и Windows NT 4.0. Имейте в виду, Windows 2000 может работать как правильно.

Редактировать: Microsoft утверждает, что некоторые из функций, которые я использовал (WriteConsoleOutput, GetAsyncKeyState), имеют минимальное требование Windows 2000. Действительно, тестирование не работает в Windows 98. Я не понял более совместимый способ вывода на консоль (системная 8-битная кодовая страница, 80 столбцов, 25 строк, 16 цветов) или определение ключа.

Ошибка MSVCRT.DLL: DLL является критической зависимостью для скомпилированных приложений C ++ так что принципиально невозможно вообще запускать какие-либо приложения C ++ на Windows 95.

Я не нашел объяснения проблемы NT 4.0.

Ответы [ 4 ]

2 голосов
/ 16 января 2020

При компиляции компилятор, похоже, не находит правильные определения для указанной c Windows версии или указанной c Inte rnet версии Explorer. Это почему? Вам нужно установить определения _WIN32_ WINDOWS, _WIN32_WINNT, WINVER и / или _WIN32_ IE на минимальную платформу, которую вы планируете поддерживать, прежде чем включать заголовочный файл windows .h. Возможные значения для этих определений можно найти в заголовочном файле w32api.h.

Взяты отсюда

1 голос
/ 15 февраля 2020

DLL-библиотека времени выполнения MS Visual C ++ не распространялась в ранних версиях Windows, либо вы статически связали код с библиотеками Microsoft (это невозможно с MinGW), либо вы развернули зависимости с помощью своего приложения.

Вторично распространяемые части VC ++ (в состав которых входит MSVCRT.DLL) предоставляются в виде распространяемого пакета, определяемого c для различных версий VC ++, MSCVRT.DLL - из VC ++ 6.0 и более недоступны из официальные источники; на свой страх и риск вы можете получить его, например, от здесь .

Ваша ошибка Windows NT 4.0 связана с вашим кодом, использующим API, который не был частью Win32 API, когда NT 4 был текущим. Вы можете указать целевую Windows версию через различные макросы, чтобы ограничить доступный API для вашего кода. Это будет генерировать ошибку времени компиляции, а не ошибку времени выполнения. Если этот конкретный вызов имеет решающее значение для вашего приложения, то он просто не может быть запущен на WinNT. В документации для SetCriticalSectionSpinCount() указано, что минимальная поддерживаемая система - XP.

Что касается проблемы ввода-вывода с консоли, MSVCRT.DLL включает в себя библиотеку conio от Microsoft (не такой же, как у Борланда). MinGW включает заголовок conio.h или здесь . Это может обеспечить то, что вам нужно.

0 голосов
/ 16 января 2020

Я мог бы написать здесь роман о фактическом наборе проблем, но суть заключается в следующем:

Новые библиотеки времени выполнения C / C ++, независимо от того, связаны ли они статически или динамически с целевым EXE-файлом, зависят от API-интерфейсов ОС, которые не были доступны в Windows 9x. Вам понадобится набор инструментов, которые по-прежнему совместимы с этими устаревшими версиями Windows.

. Вам понадобится Visual Studio 2005 или более ранняя версия, если вы хотите настроить таргетинг на Windows 95 и NT 4. Согласно странице Википедии :

Visual Studio 2005 под кодовым названием Whidbey ... был выпущен онлайн в октябре 2005 года ... ... Это последний доступна версия для Windows 2000, а также последняя версия, предназначенная для приложений Windows 98, Windows Me и Windows NT 4.0 для приложений C ++.

Вы можете быть в состоянии сделать что-то гибридное с MinGW - пусть он все еще будет компилятором, но связываться с более старыми файлами MSV C*. lib из Visual Studio 2005.

0 голосов
/ 16 января 2020

Возможно, вы можете статически связать нужные библиотеки?

...