Меню

Include pch h ошибка

Если вы не используете предварительно скомпилированные заголовки в своем проекте, установите для свойства Создать / Использовать предварительно скомпилированные заголовки исходных файлов значение Не использовать предварительно скомпилированные заголовки. Чтобы установить этот параметр компилятора, выполните следующие действия:

  • На панели «Обозреватель решений» проекта щелкните правой кнопкой мыши
    имя проекта и выберите «Свойства».

  • На левой панели щелкните папку C / C ++.

  • Щелкните по узлу «Предварительно скомпилированные заголовки».

  • На правой панели щелкните «Создать / использовать предварительно
    скомпилированный заголовок», а затем нажмите «Не использовать
    предварительно скомпилированные заголовки».

Убедитесь, что вы случайно не удалили, не переименовали или не удалили файл заголовка (по умолчанию stdafx.h) из текущего проекта. Этот файл также должен быть включен перед любым другим кодом в ваших исходных файлах с использованием #include «stdafx.h». (Этот заголовочный файл указан как свойство проекта «Создать / использовать PCH через файл»)
Источник

  • Remove From My Forums
  • Question

  • In my project I have a need to combine MFCaptureD3D project (from github entirely) with another C++ project which I coded 95% myself about 2 years ago. That project, the second one, was done under Ubuntu 14.4 and it is Linux. The MFCaptureD3D is
    now under Windows 10, Microsoft C++. So, I added the Linux C++ code to MFCaptureD3D project and now they are all a part of one Solution. While compiling I get many strange errors. This one concerns
    pch.h header file. There is also pch.cpp file in  the solution.

    I want to say that it was the compiler that added both files when I built the Solution. They contain just a copule of code lines and comments that those files «may be ignored» or something. Still I need an explanation for this compile error:

    Severity	Code	Description	Project	File	Line	Suppression State
    Error	C1853	'DebugSphere_Perspective.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)	Sphere_Perspective	c:cplusplus_projectssphere_perspectivesphere_perspectivesphere_perspectivegauss_legholobor.c	58	
    

    I’ve found a few recommendation on the web how to handle the problem but they do not seem to be applicable since they talk about

    Properties options which I cannot find in Visual Studio 17.

    Thanks, — MyCatAlex

Answers

  • Well given the fact that you mention a pch.cpp file and the error states that the file has a .c extension, I would say that the precompiled header is being built for C++, but then you are using it in a C source file.

    A precompiled header is basically the compiler saving the state of the parse tree up to that point, so this means that the information stored would be different for a C precompiled header and a C++ precompiled header. This means the compiler in C
    mode cannot use a C++ precompiled header, and the compiler in C++ mode cannot use a C precompiled header.

    That link does provide the correct solution:

    This is the properties option in Visual Studio 2019.

    This is the properties option in Visual Studio 2017:

    So it definitely exists.

    Remember, you have to right click on the individual source file and select Properties to get that option.


    This is a signature. Any samples given are not meant to have error checking or show best practices. They are meant to just illustrate a point. I may also give inefficient code or introduce some problems to discourage copy/paste coding. This is because
    the major point of my posts is to aid in the learning process.

    • Marked as answer by

      Thursday, May 16, 2019 6:54 PM

  • First a little history. When Microsoft first developed a C++ compiler processors were not as fast as they are now. The compiler was not fast enough and they could not release a product with the bad performance. Then someone came up with the idea
    for precompiled headers and that was a big success, they could release the compiler.

    Initially the default names were stdafx.h and stdafx.cpp. Many people have had problems with them and many developers just turn them off. I have struggled to learn how to use them and I know that Microsoft did not
    adequately document their use. Recently Microsoft has obviously change the default names to pch.h and pch.cpp.

    The intent is for all the headers that are commonly used by the project and that are unlikely to be changed (do not have code from the project being developed) exist in one file, the pch.h file. Then the
    project properties specify that precompiled #includes are to be used. Except the pch.cpp file is different. For that file the option is set for it to create a precompiled #includes file. Normally the first h file in each cpp file is the
    pch.h file.

    The following is for VS 2017 and I assume is the same in VS 2019.

    • in the project’s properties for «C/C++» | «Precompiled Headers» set «Precompiled Header» to «Use (/Yu)»
    • in the properties for the pch.cpp file set «Precompiled Header» to «Create (/Yc)» for just that file

    For the precompiled header file is from a previous version error, that will go away when the precompiled header file is compiled. You do that by setting the options for it.


    Sam Hobbs
    SimpleSamples.Info

    • Marked as answer by
      MyCatAlex
      Thursday, May 16, 2019 6:52 PM
    • Edited by
      Simple Samples
      Thursday, May 16, 2019 7:10 PM

  • Option 1-

    If you are not going to use precompiled headers with gauss_legHolobor.c it should not contain a #include statement for pch.h.  If it does, remove it.  Then insert the required #include statements.  They should be noted in the C source file
    that you downloaded.  For example, a #include for stdlib.h and any others.  Refer to the linux source as a guide.

    Option 2 —

    As discussed in the earlier link, you can compile gauss_legHolobor.c as C++ if you change the extension to .cpp, or by setting a property for that file in it’s property page.  (I haven’t shown this because renaming the file extension is simpler). 
    Then you can leave the #include statement for pch.h in the file as the first #include and set the file’s property page to use precompiled headers.

    • Edited by
      RLWA32
      Thursday, May 16, 2019 6:41 PM
    • Marked as answer by
      MyCatAlex
      Thursday, May 16, 2019 6:52 PM

Когда я создаю свое решение на C ++ в Visual Studio, оно жалуется на отсутствие файла xxxxx.pch. Есть ли параметр, который мне не хватает, чтобы вернуть предварительно скомпилированные заголовки?

Вот точная ошибка для полноты:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debugxxxxx.pch': No such file or directory

13 ответов

Лучший ответ

ПРИМЕЧАНИЕ. Более поздние версии IDE могут использовать «pch» вместо «stdafx» в именах по умолчанию для связанных файлов. В приведенных ниже инструкциях может потребоваться заменить pch на stdafx. Я прошу прощения. Это не моя вина.

  1. Щелкните правой кнопкой мыши свой проект в обозревателе решений.
  2. Щелкните Свойства в нижней части раскрывающегося меню.
  3. В левом верхнем углу страниц свойств выберите в раскрывающемся меню «Все конфигурации».
  4. Откройте дерево C / C ++ и выберите Предварительно скомпилированные заголовки.
  5. Предварительно скомпилированный заголовок: выберите «Использовать» (/ Yu)
  6. Заполните поле Precompiled Header File. Стандарт — stdafx.h
  7. Нажмите ОК

  8. Если у вас нет stdafx.h в ваших заголовочных файлах, поместите его туда. Редактировать в него # включить все заголовки, которые вы хотите предварительно скомпилировать.

  9. Поместите в свой проект файл с именем stdafx.cpp. Поместите #include «stdafx.h» вверху и ничего больше.
  10. Щелкните правой кнопкой мыши файл stdafx.cpp в обозревателе решений. Снова выберите Свойства и Все конфигурации, как на шаге 4 …
  11. … но на этот раз выберите Предварительно скомпилированный заголовок Создать (/ Yc) . Это только привязать к одному файлу stdafx.cpp.
  12. Поместите #include «stdafx.h» в самый верх всех ваших исходных файлов.

Lucky 13. Скрестите пальцы и нажмите Build.


503

Jive Dadson
19 Авг 2018 в 06:43

  1. Щелкните правой кнопкой мыши проект и выберите пункт меню свойств.
  2. goto C / C ++ -> Предварительно скомпилированные заголовки
  3. Выберите «Не использовать предварительно скомпилированные заголовки»

Да, это можно устранить с помощью параметров / Yc, как указывали другие, но, скорее всего, вам не нужно прикасаться к нему, чтобы исправить это. Почему вы вообще получаете эту ошибку, не меняя никаких настроек? Возможно, вы «очистили» проект, а затем попытались скомпилировать один файл cpp. В этом случае вы получите эту ошибку, потому что заголовок прекомпилятора теперь отсутствует. Просто создайте весь проект (даже если он неудачный), а затем создайте любой отдельный файл cpp, и вы не получите эту ошибку.


2

zar
25 Ноя 2013 в 23:34

Если это происходит с вами на сборке сервера (AppCenter) и вы используете CocoaPods, убедитесь, что ваш Podfile зарегистрирован.

AppCenter запускает команду «pod install» только в том случае, если он находит Pofile и НЕ находит папку PODS в файлах.

У меня была отмечена папка, но поскольку git автоматически игнорирует файлы .pch (проверьте .gitignore, чтобы проверить это), мой .pch не проверялся.

Я решил проблему, заставив файлы .pch проверять ее, но удаление папки PODS тоже должно работать, поскольку в этом случае Appcenter запустит команду установки модуля.

Надеюсь, это кому-то поможет.


2

Marco Leite
8 Окт 2018 в 18:51

Попробуйте Build> Clean Solution, затем Build> Build Solution. Это работает для меня.


1

Nick Dong
5 Мар 2014 в 08:47

Мне удалось создать эту проблему для себя, потому что я хотел использовать файлы pch.h и pch.cpp из разных каталогов. Итак, я удалил два файла из своего проекта, а затем добавил их как существующие файлы откуда-то еще. Большая ошибка, поскольку файлы предварительно скомпилированных заголовков больше не могут быть найдены.

Я не могу найти способ решить проблему в пользовательском интерфейсе Visual Studio 2019. Вы должны отредактировать файл проекта и убедиться, что он выглядит следующим образом:

 <ClCompile Include="pch.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
  </ClCompile>


1

Jack D Menendez
20 Сен 2021 в 19:24

Использование предварительно скомпилированного заголовка (pch) — это двухэтапный процесс.

На первом этапе вы компилируете файл-заглушку (в VS200x он обычно называется stdafx.cpp. В более новых версиях используется pch.cpp.). Этот файл-заглушка косвенно включает только те заголовки, которые вы хотите предварительно скомпилировать. Обычно в одном небольшом заголовке (обычно stdafx.h или pch.hpp) перечислены стандартные заголовки, такие как <iostream> и <string>, которые затем включаются в файл-заглушку. При компиляции создается файл .pch.

На шаге 2 ваш фактический исходный код включает тот же небольшой заголовок из шага 1, что и первый заголовок. Компилятор, когда он встречает этот специальный заголовок, вместо этого читает соответствующий файл .pch. Это означает, что ему не нужно каждый раз (пере) компилировать эти стандартные заголовки.

В вашем случае кажется, что шаг 1 не выполняется. Файл-заглушка все еще присутствует? В вашем случае это, вероятно, будет xxxxx.cpp. Это должен быть файл, скомпилированный с помощью /Yc:xxxxx.pch, поскольку это флаг компилятора, указывающий, что это шаг 1 процесса PCH. Если присутствует xxxxx.cpp и является таким файлом-заглушкой, то, вероятно, отсутствует его параметр компилятора /Yc:.


61

MSalters
21 Май 2020 в 13:51

Fix :

  1. Убедитесь, что в вашем проекте есть xxxxx.cpp

  2. Скомпилируйте xxxxx.cpp с флагом / Yc ( Создать предварительно скомпилированный заголовок)
    (щелкните правой кнопкой мыши xxxxx.cpp -> свойства -> Предварительно скомпилированные заголовки -> создать )

  3. Скомпилируйте все остальные файлы с флагом / Yu ( Используйте предварительно скомпилированный заголовок)
    (щелкните правой кнопкой мыши проект -> свойства -> Предварительно скомпилированные заголовки -> использовать )


26

franckspike
20 Ноя 2012 в 22:55

VS облажался (у меня 2019; (). Продолжайте и выберите «не использовать предварительно скомпилированные заголовки», как указывают другие ребята, затем откройте файл проекта (vcxproj) с помощью любого текстового редактора и удалите выделенные две записи в двух местах. Наслаждайтесь На самом деле, запись pch.h в файле vcxproj, которую вы видите ниже, вы всегда найдете в интерфейсах свойств VS.

snapshot from nnn.vcxproj file


2

Sam Saarian
2 Июн 2021 в 05:49

Если все верно, но эта ошибка присутствует, необходимо проверить следующий раздел в файле ****. Vcxproj:

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

В моем случае это было неверное имя конфигурации: только первое слово.


0

Sergey ArcTechno
30 Окт 2016 в 19:14

Я знаю, что эта тема очень старая, но недавно я имел дело с этим в VS2015, и что помогло, так это удаление папок сборки и ее повторная сборка. Это могло произойти из-за попытки закрыть программу или из-за остановки / зависания программы VS во время сборки.


1

glover12
26 Дек 2016 в 02:16

Я искал файл iOS PCH с той же проблемой, если вы попали сюда, как и я, решение, которое я нашел, — очистить производные данные; Закройте симуляторы, перейдите к параметрам xCode -> местоположения -> перейдите к пути к файлу производных данных, закройте xCode, удалите файлы в папке производных данных, перезапустите и приветствуйте 🙂


1

Ahmed Awad
13 Сен 2017 в 12:33

У меня была такая же проблема, и мне удалось решить ее следующим образом:

ОШИБКА :

fatal error C1083: Cannot open precompiled header file : "DebugmyProj.pch". No such file or directory

Первый, когда у меня была ошибка,

И изменил его как вторую картинку

  • сделать (/Yx)

  • myProj.h введите здесь описание изображения


1

Zarina Abdibaitova
23 Мар 2022 в 12:51

Добавлено 27 марта 2021 в 12:55

В этом разделе мы рассмотрим некоторые из распространенных проблем, с которыми, похоже, начинающие программисты сталкиваются с довольно высокой вероятностью. Это не исчерпывающий список проблем компиляции или запуска программ, а скорее прагматичный список решений самых основных проблем. Если у вас есть предложения по другим вопросам, которые могут быть добавлены в этот список, опубликуйте их в разделе комментариев ниже.

Общие проблемы во время выполнения

Вопрос: При выполнении программы окно консоли мигает, а затем сразу закрывается.


Сначала добавьте или убедитесь, что следующие строки находятся в верхней части вашей программы (пользователи Visual Studio должны убедиться, что эти строки появляются после #include "pch.h" или #include "stdafx.h", если таковые существуют):

#include <iostream>
#include <limits>

Во-вторых, добавьте следующий код в конец функции main() (прямо перед оператором return):

// сбрасываем все флаги ошибок
std::cin.clear();
// игнорируем любые символы во входном буфере, пока не найдем новую строку
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
// получаем от пользователя еще один символ
std::cin.get();

Это заставит вашу программу ждать, пока пользователь нажмет любую клавишу, прежде чем продолжить, что даст вам время изучить вывод вашей программы, прежде чем ваша операционная система закроет окно консоли.

Другие решения, такие как обычно предлагаемое system("pause"), могут работать только в определенных операционных системах, и их следует избегать.

Более старые версии Visual Studio могут не приостанавливаться, когда программа запускается в режиме Начать с отладкой (Start With Debugging) (F5). Попробуйте запустить в режиме Начать без отладки (Start Without Debugging) (Ctrl + F5).

Вопрос: Я запустил свою программу, получил окно, но ничего не выводится.


Выполнение может блокировать ваш антивирус. Попробуйте временно отключить его и посмотрите, не в этом ли проблема.

Вопрос: Моя программа компилируется, но работает некорректно. Что не так?


Отладьте ее! Советы по диагностике и отладке программ приведены далее в главе 3.

Общие проблемы времени компиляции

Вопрос: Когда я компилирую свою программу, я получаю ошибку о неразрешенном внешнем символе _main или _WinMain@16


Это означает, что ваш компилятор не может найти вашу функцию main(). А все программы должны включать в себя эту функцию.

Есть несколько вещей, которые нужно проверить:

  1. Содержит ли ваш код функцию с именем main?
  2. Правильно ли написано имя main?
  3. Когда вы компилируете свою программу, видите ли вы, что файл, содержащий функцию main(), компилируется? Если нет, либо переместите функцию main() в другой файл, либо добавьте этот файл в свой проект (для получения дополнительной информации о том, как это сделать, смотрите урок «2.7 – Программы с несколькими файлами кода»).
  4. Вы точно создали консольный проект? Попробуйте создать новый консольный проект.

Вопрос: Я пытаюсь использовать функциональность C++11/14/17/XX, но она не работает.


Если у вас старый компилятор, он может не поддерживать эти более свежие дополнения к языку. В этом случае обновите свой компилятор.

В случае с современными IDE/компиляторами ваш компилятор может по умолчанию использовать более старый стандарт языка. Мы рассмотрим, как изменить стандарт языка в уроке «0.12 – Настройка компилятора: выбор стандарта языка».

Вопрос: При попытке использовать cin, cout или endl компилятор говорит, что cin, cout или endl являются «необъявленными идентификаторами».


Во-первых, убедитесь, что вы включили следующую строку в верхней части файла:

#include <iostream>

Во-вторых, убедитесь, что каждое использование cin, cout и endl имеет префикс «std::«. Например:

std::cout << "Hello world!" << std::endl;

Если это не решит вашу проблему, возможно, ваш компилятор устарел или установка повреждена. Попробуйте переустановить и/или обновить компилятор до последней версии.

Вопрос: При попытке использовать endl для завершения напечатанной строки компилятор говорит, что end1 является «необъявленным идентификатором».


Убедитесь, что вы не перепутали букву l (нижний регистр L) в endl с цифрой 1. endl – это все буквы. Убедитесь, что ваш редактор использует шрифт, который проясняет разницу между строчной буквой L, заглавной i и цифрой 1. Кроме того, во многих шрифтах, не предназначенных для программирования, можно легко перепутать заглавную букву o и цифру ноль.

Проблемы с Visual Studio

Вопрос: При компиляции с помощью Microsoft Visual C++ вы получаете фатальную ошибку C1010 с сообщением типа «c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive» (неожиданный конец файла при поиске директивы предварительно скомпилированного заголовка).


Эта ошибка возникает, когда компилятор Microsoft Visual C++ настроен на использование предварительно скомпилированных заголовков, но один (или несколько) ваших файлов кода C++ не включает #include "stdafx.h" или #include "pch.h" в качестве первой строки кода файла.

Предлагаемое нами решение – отключить предварительно скомпилированные заголовки, как это сделано в уроке «0.7 – Компиляция вашей первой программы».

Если вы хотите, чтобы предварительно скомпилированные заголовки были включены, чтобы решить эту проблему, просто найдите файл(ы), вызывающий ошибку (в приведенной выше ошибке виновником является test.cpp), и добавьте следующую строку в самом верху файла):

#include "pch.h"

В более старых версиях Visual Studio используется stdafx.h вместо pch.h, поэтому, если pch.h не решает проблему, попробуйте stdafx.h.

Обратите внимание, что для программ с несколькими файлами каждый файл кода C++ должен начинаться с этой строки.

Кроме того, вы можете отключить предварительно скомпилированные заголовки.

Вопрос: Visual Studio выдает следующую ошибку: «1MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function «int __cdecl invoke_main(void)» (?invoke_main@@YAHXZ)» (неразрешенный внешний символ _WinMain@16).


Скорее всего, вы создали не консольное приложение, а графическое приложение Windows. Создайте заново свой проект и убедитесь, что вы создали его как консольный проект Windows (или Win32).

Вопрос: Когда я компилирую свою программу, я получаю предупреждение «Cannot find or open the PDB file» (не могу найти или открыть файл PDB).


Это предупреждение, а не ошибка, поэтому оно не должно повлиять на вашу программу. Однако она раздражает. Чтобы исправить это, перейдите в меню Debug (Отладка) → Options and Settings (Параметры) → Symbols (Символы) и установите флажок Microsoft Symbol Server (Сервер символов Microsoft).

Прочее

Вопрос: У меня есть еще одна проблема, которую я не могу понять. Как я могу быстро получить ответ?


По мере обучения у вас, несомненно, будут возникать вопросы или неожиданные проблемы. Что делать дальше, зависит от вашей проблемы. Но в целом есть несколько вещей, которые вы можете попробовать.

Сначала спросите Google. Найдите хороший способ сформулировать свой вопрос и выполните поиск в Google. Если вы получили сообщение об ошибке, вставьте точное сообщение в Google, используя кавычки. Скорее всего, кто-то уже задавал тот же вопрос, и вы найдете ответ.

Если это не поможет, спросите на сайте вопросов и ответов. Существуют веб-сайты, предназначенные для вопросов и ответов о программировании, например, Stack Overflow. Попробуйте разместить там свой вопрос. Не забудьте подробно описать, в чем заключается ваша проблема, и включить всю необходимую информацию, например, какую ОС и какую IDE вы используете.

Теги

C++ / CppFAQLearnCppДля начинающихОбучениеПрограммирование

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Inarc dll вернул код ошибки 11
  • In5p поло седан что значит ошибка