Как устранить ошибку 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", чтобы временные файлы (включая предварительно скомпилированные заголовочные файлы) были записаны в разные каталоги.
Другие вопросы по тегам