Как устранить ошибку C2859 при попытке использовать предварительно скомпилированный заголовок с VS2010 (VC100) в режиме отладки? - PullRequest
9 голосов
/ 01 июля 2010

Я пытаюсь обновить старое решение для использования VS2010 (VC100).

У меня настроено так, что stdafx.cpp создаст предварительно скомпилированный заголовок stdafx.pch из stdafx.h. Затем всем остальным .cpp-файлам, в том числе stdafx.h, указывается использовать предварительно скомпилированный заголовок.

Эти посты помогли мне зайти так далеко:

Теперь все нормально, когда я работаю в режиме релиза. Однако, когда я пытаюсь встроиться в режим отладки, я получаю кучу ошибок, говорящих:

Ошибка 1, ошибка C2859: [удалено] \ debug \ vc100.idb - это не файл idb, который использовался при создании этого предварительно скомпилированного заголовка, заново создайте предварительно скомпилированный заголовок.

Я считаю, что этот файл .idb является промежуточным файлом отладки, созданным Visual Studio.

Почему я получаю эту ошибку? Другими словами, почему он не использовал этот файл .idb при создании предварительно скомпилированного заголовка?

Я не уверен, какую дополнительную информацию вам нужно, чтобы дать мне ответ, поэтому просто спросите, есть ли еще информация, которую мне нужно предоставить.

Ответы [ 5 ]

4 голосов
/ 02 июля 2010

Спасибо коллеге, я получил ответ.

Проблема заключалась в том, что в stdafx.cpp для формата отладочной информации было задано значение «База данных программ» (/ Zi), а для всех остальных файлов - «База данных программ для редактирования и продолжения» (/ZI).

Изменение их всех на Программную базу данных для редактирования и продолжения (/ ZI) и полное восстановление решило проблему.

Полагаю, обновление каким-то образом облажалось.

2 голосов
/ 07 июня 2016

Я столкнулся с этой ошибкой в ​​VS2005 при компиляции проекта, где $(ProjectName) отличается от фактического выходного файла проекта (т. Е. Linker > Output File не установлено по умолчанию $(OutDir)\$(ProjectName).exe но к чему-то другому, например $(OutDir)\$(ProjectName)-custom_postfix.exe)

В этом случае и, по-видимому, only при выполнении Rebuild-Project-Only, vc80.pdb выглядит неправильно.

Что помогло мне, это дополнительно установить C/C++ > Output Files > Progam Database File Name на $(IntDir)\$(TargetName).pdb. (Вместо значения по умолчанию vc80.pdb)

1 голос
/ 04 июня 2014

выберите Отключить для формата информации отладки на странице свойств для stdafx.cpp, затем вернитесь назад и выберите Наследовать от родительского работала для меня.

0 голосов
/ 05 июля 2010

Вот как я только что исправил эту ошибку в Visual Studio 2008:

Справочная информация:

  • У меня есть решение, которое содержит два подпроекта.
  • Один проект компилирует .dll;
  • Один проект компилирует .exe, который использовал этот .dll;
  • .exe-проект зависит от .dll-проекта;
  • Проблема: оба проекта выгружали свои выходные данные в один и тот же каталог, т. Е. Оба «OutPutDirectory» и «IntermediateDirectory» настроены на запись в общий каталог в корне, «../$(ConfigurationName)".

Причина ошибки:

  • Причиной этой ошибки было то, что при компиляции проекта .dll он создавал предварительно скомпилированный заголовок (* .pch) в каталоге , таком же , что и каталог .exe, и когда проект .exe был скомпилирован, он быстро перезаписал предварительно скомпилированный заголовок (* .pch) из проекта .dll.

Исправление:

  • Чтобы исправить это, я изменил «IntermediateDirectory» для обоих подпроектов на «temp», чтобы временные файлы (включая предварительно скомпилированные заголовочные файлы) были записаны в разные каталоги.
0 голосов
/ 01 июля 2010

Может быть, ваша сборка релиза настроена на запись файла [удален] \ debug \ vc100.idb вместо [удален] \ release \ vc100.idb?Проверьте настройки проекта для вашей сборки выпуска и убедитесь, что нет таких жестко закодированных компонентов пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...