Как устранить ошибку C2859 при попытке использовать предварительно скомпилированный заголовок с VS2010 (VC100) в режиме отладки?
Я пытаюсь обновить старое решение для использования VS2010 (VC100).
Я настроил его так, чтобы stdafx.cpp создавал предварительно скомпилированный заголовок stdafx.pch из stdafx.h. Затем всем остальным.cpp-файлам, которые включают stdafx.h, предписано использовать предварительно скомпилированный заголовок.
Эти посты помогли мне получить это далеко:
Теперь все нормально, когда я строю в режиме релиза. Однако, когда я пытаюсь встроить в режим отладки, я получаю кучу ошибок, говорящих:
Ошибка 1 ошибка C2859: [удалено]\debug\vc100.idb - это не файл idb, который использовался при создании этого предварительно скомпилированного заголовка, заново создайте предварительно скомпилированный заголовок.
Я считаю, что этот файл.idb является промежуточным файлом отладки, созданным Visual Studio.
Почему я получаю эту ошибку? Другими словами, почему он не использовал этот файл.idb при создании предварительно скомпилированного заголовка?
Я не уверен, какую дополнительную информацию вам нужно, чтобы дать мне ответ, поэтому просто спросите, есть ли еще информация, которую я должен предоставить.
5 ответов
Благодаря коллеге я получил ответ.
Проблема заключалась в том, что в stdafx.cpp для формата отладочной информации было установлено значение "База данных программ" (/Zi), а для всех остальных файлов - "База данных программ для редактирования и продолжения" (/ZI).
Изменение их всех на Программную базу данных для редактирования и продолжения (/ ZI) и полное восстановление решило проблему.
Я думаю, что обновление как-то облажалось.
Я столкнулся с этой ошибкой с VS2005 при компиляции проекта, где $(ProjectName)
отличается от фактического выходного файла проекта (т.е. Linker > Output File
не установлен по умолчанию $(OutDir)\$(ProjectName).exe
но к чему-то другому, например $(OutDir)\$(ProjectName)-custom_postfix.exe
)
В этом случае, и, видимо, только при выполнении Rebuild-Project-Only, vc80.pdb
кажется, неправильно смотрел вверх.
Что помогло мне было дополнительно установить C/C++ > Output Files > Progam Database File Name
в $(IntDir)\$(TargetName).pdb
, (Вместо значения по умолчанию vc80.pdb
)
Выберите Отключить для формата информации отладки на странице свойств для stdafx.cpp, затем вернитесь назад и выберите Inherit от родительского работал для меня.
Может быть, ваша сборка релиза настроена на запись файла [удален]\debug\vc100.idb вместо [удален]\release\vc100.idb? Проверьте настройки проекта для вашей сборки выпуска и убедитесь, что нет таких жестко закодированных компонентов пути.
Вот как я только что исправил эту ошибку в Visual Studio 2008:
Фон:
- У меня есть решение, которое содержит два подпроекта.
- Один проект компилирует.dll;
- Один проект компилирует.exe, который использовал этот.dll;
- Проект.exe зависит от проекта.dll;
- Проблема: у меня были оба проекта, сбрасывающие свои выходные данные в один и тот же каталог, т. Е. Оба "OutPutDirectory" и "IntermediateDirectory" настроены на запись в общий каталог в корне "../$(ConfigurationName)".
Причина ошибки:
- Причиной этой ошибки было то, что при компиляции проекта.dll он создавал предварительно скомпилированный заголовок (*.pch) в том же каталоге, что и каталог.exe, а когда проект.exe был скомпилирован, он быстро перезаписывал предварительно скомпилированный заголовок. (*.pch) из проекта.dll.
Исправление:
- Чтобы исправить это, я изменил "IntermediateDirectory" для обоих подпроектов на "temp", чтобы временные файлы (включая предварительно скомпилированные заголовочные файлы) были записаны в разные каталоги.