Приложение MFC, которое я пытаюсь перенести, использует afxext.h, что приводит к установке _AFXDLL, что вызывает эту ошибку, если я устанавливаю /MT:
Please use the /MD switch for _AFXDLL builds
Мои исследования на сегодняшний день показывают, что невозможно создать приложение для выполнения в Windows NT 4.0 с помощью Visual Studio (в данном случае C++) 2005.
Это правда? Есть ли обходной путь?





Нет, есть много приложений, созданных с помощью VS2005, которые должны поддерживать Windows XP, 2000, NT и весь стек. Проблема в том, что (по умолчанию) VS2005 хочет использовать библиотеки / экспорт, которых нет в NT.
См. Справочную информацию в эта ветка.
Затем начните ограничивать свои зависимости с помощью макросов препроцессора и избегать API-интерфейсов, которые не поддерживаются в NT.
Эта проблема сбивает с толку то, что при статической ссылке на самом деле втягиваются только объектные файлы, необходимые для используемых вами символов, поэтому в большинстве случаев это работает на NT4.
Чтобы избавиться от ошибки _AFXDLL, пробовали ли вы изменить настройки, чтобы использовать MFC как статическую библиотеку вместо DLL? Это похоже на то, что вы уже делаете, меняя библиотеки времени выполнения на статические вместо DLL.
Хотя я не знаком с afxext.h, мне интересно, что в нем делает его несовместимым с Windows NT4 ....
Однако, чтобы ответить на исходный вопрос: «Мои исследования на сегодняшний день показывают, что невозможно создать приложение для выполнения в Windows NT 4.0 с помощью Visual Studio (в данном случае C++) 2005».
Ответ должен быть положительным, особенно если приложение изначально было написано или запущено на NT4! Не считая afxext.h, это должно быть легко ДА.
Еще одна проблема, с которой я сталкиваюсь, - это расплывчатый характер, из-за которого люди отбрасывают термин NT. Конечно, большинство людей думают о NT как о Windows NT4, но это все еще неоднозначно, потому что «большинство людей» не равно «всем людям».
На самом деле термин «NT» эквивалентен серии NT. Серии NT - это NT3, NT4, NT5 (2000, XP, 2003) и NT6 (Vista).
Win32 - это подсистема, на которую вы нацелены и на свой код C / C++. Так что я не вижу причин, по которым нельзя ориентироваться на эту платформу и подсистему NT4 или, если это упражнение по портированию платформы, удалить зависимости MFC, которые, возможно, навязывает VC.
Добавление afxext.h в микс мне кажется проблемой совместимости подсистем. Это часть MFC из моего исследования Google. Кажется, что afxext.h является расширением MFC (Microsoft Foundation Class).
Можете ли вы избавиться от зависимости от MFC? Что это за приложение? (CLR, служба, графический интерфейс?) Можно ли преобразовать проект в неуправляемый проект C++ в VC 8.0?
Надеюсь, что-то из этого вам поможет.
Обходной путь - исправить многопоточную DLL. Простые инструкции. Краткое содержание:
The shipping 8.0 C Runtime Library DLL (MSVCR80.DLL) does not support NT 4.0 SP6 for one reason and one reason only: someone at Microsoft added a function call to
GetLongPathNameWwhich does not exist in kernel32.dll on NT 4.0.CRTLIB.C On line 577, there is a call to
GetLongPathNameW. simply replace it with:ret = 0;only use this build of MSVCR80.DLL on NT 4.0.
После того, как вы их заработаете, придумать более общее решение должно быть тривиально.
Идея в том, что exe необходим для линковки к статической библиотеке.
Пожалуйста, попробуйте это «Свойства конфигурации», «Общие», «Использование MFC» для «Использование MFC в статической библиотеке» «Свойства конфигурации», «Общие», «Использование ATL» на «Статическая ссылка на ATL»
«Свойства конфигурации», «C \ C++», «Генерация кода», «Библиотека времени выполнения» на «Многопоточность (\ MT)»
Тестовая платформа Машина сборки: Visual Studio 2005 на Windows XP с пакетом обновления 2 (SP2) Клиентская машина: Window XP SP2 (VS2005 не установлен)
Кто-нибудь, пожалуйста, защитите это.