Как собрать рефраст Windows D3D9 из исходного кода?
Вопрос
Microsoft распространяет исходный код для справочных реализаций своих различных API-интерфейсов Direct3D среди поставщиков оборудования, разработчиков драйверов и т. д.Этот код собирается с использованием всегда загадочной системы сборки WDK (ранее DDK) и практически никогда не работает «из коробки».Несмотря на то, что этот код широко используется, он является получастным, поэтому в широкой сети никогда не бывает никакой базовой полезной информации.Это достаточно широко используется (и это хорошо известная боль в заднице в этом сообществе), а базовая информация о сборке достаточно нечувствительна, чтобы ее можно было обнаружить в Google.
В файле readme сборки предлагается использовать WDK и выполнить сборку с помощью команды build -cz -daytona
.Это, как ни странно, выдает кучу выходных данных, но ничего не создает.
Преодолев это, Vista с WDK 6001.18002, последним исходным дистрибутивом d3def9, не работает в link
подпроект с сообщением «не удалось вывести какие-либо выходные данные — предупреждение рассматривается как ошибка».
Сборка XP d3dref9.dll также может сбивать с толку, поскольку часто не удается найти заголовки и типы D3D.
Решение
Как правило, при создании исходных блоков рефрастирования возникают две основные проблемы, поскольку они поступают непосредственно от Microsoft.
Во-первых, build -cz -daytona
Команда либо является опечаткой, либо основана на недокументированной дополнительной внешней конфигурации.При сборке в этом режиме анализируется весь исходный код, но никогда не указывается, какую платформу(ы) собирать.Поскольку все платформы dirs
(daytona
и win9x
), где указаны фактические результаты, являются «необязательными», на самом деле ничего не создается.Решение этой проблемы состоит в том, чтобы вместо этого использовать правильно указанную команду build -cz daytona
(нет '-
' на daytona
).Это должно проанализировать источники, а затем фактически строить все.
Помимо этого, обычно также возникают проблемы с настройкой готовой сборки.
Новые WDK (например.в Vista) обычно завершается сбоем на последнем этапе компоновки из-за ложной ошибки компоновщика.Это легко исправить, добавив:
LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) /IGNORE:4001
к link/sources.inc
файл сборки.После этого, build -cz daytona
в корне дропа исходников надо собрать и слинковать всё из коробки.
В XP также часто возникают проблемы при использовании старых DDK (до Windows Server 2003, т.е.DDK с маркировкой «XP»).В частности, проект рефрастирования опирается на существующие внешние заголовки ядра D3D9, которые не включены в XP DDK.Эту проблему можно решить, просто используя последние версии WDK (переименованные из «DDK» после XP).Вопреки названию, все новые WDK, как правило, представляют собой расширенные версии старых выпусков и поэтому включают среды сборки для платформ начиная с XP.
Также могут возникнуть проблемы с некоторыми версиями перефразирования исходного кода XP, включая код, который вызывает более педантичные ошибки компилятора в новых версиях компилятора WDK.Однако их обычно можно легко исправить путем итеративной компиляции и настройки исходного кода в ответ на любые простые ошибки безопасности/корректности, возникающие в результате компилятора.