Мы просмотрели пункты, перечисленные в MSDN WRT для этой ошибки (кроме # 5). Похожая проблема возникает у трех разных людей на разных машинах. PDB создается, но с ошибкой находится где-то посередине.
Подробнее:
- 67 статических библиотек
- 4.27 ГБ статических библиотек
- 1048575 bytes - размер PDB при сбое компоновщика
- Последняя пара мегабайт PDB равна нулю (ноль)
- Сборка сборки завершается успешно и создает PDB (мы включаем его, без информации отладки в exe)
- Релиз сборки PDB составляет чуть менее 1 ГБ.
У нас отключены антивирусные сканеры. Наблюдался с procmon.exe и не видел никаких подозрений в взаимодействии с PDB при неудаче компоновщика.
Связанный с этим вопрос предполагает ограничение ~ 1 ГБ на PDB - кто-нибудь/способ подтвердить это?
ОБНОВЛЕНИЕ И РЕШЕНИЕ:
@Barry и команда хром придумали решение. Здесь - это исправление для системы сборки Chromium, которая реализует разрешение.
Подробнее
PDB использует внутреннюю виртуальную файловую систему: MSF. Когда компоновщик создает файл PDB, он по умолчанию использует (по-видимому, неконфигурируемый) размер страницы 2 КБ. По-видимому, и, к счастью, когда компилятор создает свой PDB, он по умолчанию задает размер страницы 4 кБ. Этот PDB компилятора можно поднять и использовать в качестве базы для PDB компоновщика.
Лучшее решение Как событие Pre-Link в проекте, который связывает ваш exe или dll, мы можем поднять компилятор для генерации нашего необходимого начального PDB:
cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb"
Исходное решение
Создайте проект статической библиотеки С++ с пустым файлом cpp, настройте "Имя файла базы данных Porgram" для вывода чего-либо, кроме значения по умолчанию. Используйте некоторые события для создания проекта (я использовал "Событие предварительной привязки" ), чтобы скопировать в ранее созданный PDB туда, где вы ожидаете от компоновщика (см. Linker- > Generate Program Database File), чтобы создать его PDB. К счастью, компоновщик примет скопированный в PDB и использует его размер страницы 4 кБ. Это купит некоторое время и некоторое пространство, позволяющее до 2 ГБ PDB.