Мы прошли через пункты, перечисленные на MSDN WRT к этой ошибке (кроме # 5). Три разных человека на разных машинах получают одну и ту же проблему. PDB создан, но выходит из строя где-то посередине.
Подробности:
Мы отключили антивирусные сканеры. Наблюдали с procmon.exe и не видели никаких подозрений во взаимодействии с PDB, когда компоновщик вышел из строя.
Связанный вопрос предлагает ограничение в 1 ГБ для PDB — кто-нибудь / способ подтвердить это?
ОБНОВИТЬ & РЕШЕНИЕ:
@ Барри и команда Chromium придумали решение. Вот является патчем для системы сборки Chromium, которая реализует разрешение
подробности
PDB использует виртуальную файловую систему внутри: MSF. Когда компоновщик создает файл PDB, по умолчанию используется размер страницы (по-видимому, не конфигурируемый) 2 КБ. По-видимому & к счастью, когда компилятор создает свою PDB, размер страницы по умолчанию равен 4 кБ. Этот компилятор PDB может быть поднят и использован в качестве базы для компоновщика PDB.
Лучшее решение
Как Событие до ссылки в проекте, который связывает ваш exe или dll, мы можем поднять компилятор, чтобы сгенерировать наш требуемый начальный PDB:
cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb"
Оригинальное решение
Создайте проект статической библиотеки C ++ с пустым файлом cpp, настройте «Имя файла базы данных Porgram» для вывода чего-то отличного от значения по умолчанию. Используйте некоторые события сборки проекта (я использовал «Pre-Link Event»), чтобы скопировать в ранее созданную PDB туда, куда ожидает ваш компоновщик (см. Linker-> Generate Program Database File) для создания своей PDB. К счастью, компоновщик примет скопированное в PDB и использует размер страницы 4 КБ. Это позволит выиграть время и пространство, вмещающее до 2 ГБ PDB.
Существует действительно максимальный предел 1GB
для размера pdb.
Есть некоторая хитрость, чтобы расширить это до 2GB
(больше информации об этом можно найти Вот). По сути, вы должны сгенерировать исходный файл pdb вместо компилятора.
Другие вещи, которые вы могли бы сделать, это сделать некоторые активные подъемы в коде вашего шаблона, так как это может повлиять и на ваши размеры pdb.
Я собрал тестовую программу с 1000 cpp файлами, каждый cpp с одной функцией, которая создала 500 уникальных типов шаблонов.
Ошибка Link.exe при достижении файла PDB: 1048575 КБ.
Кажется, что это какой-то жесткий предел в 1 ГБ в формате PDB или в LINK.exe.
Вы пытались уменьшить количество параллельных сборок. Установка где-то в IDE. На VC9 у нас была похожая проблема, и нашим единственным решением было уменьшить количество локальных сборок.
Может ли быть проблема с памятью? Вы используете VC 10 SP1?