Не удается открыть источник файл pch h
Компилятор создает ошибку C1083, когда не удается найти требуемый файл. Эта ошибка имеет несколько возможных причин. Наиболее распространенными причинами являются неверный путь поиска include или отсутствующие или неправильно именованные файлы заголовков, но другие типы файлов и проблемы могут также вызвать C1083. Ниже приведены некоторые распространенные причины, по которым компилятор создает эту ошибку.
Предкомпилированные заголовки еще не скомпилированы
Если проект настроен для использования предварительно скомпилированных заголовков, необходимо создать соответствующие .pch файлы, чтобы можно было скомпилировать файлы, использующие содержимое заголовка. например, pch.cpp файл ( stdafx.cpp в Visual Studio 2017 и более ранних версий) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичном проекте процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе Создание предкомпилированных файлов заголовков.
13 Answers 13
NOTE: Later versions of the IDE may use "pch" rather than "stdafx" in the default names for related files. It may be necessary to substitute pch for stdafx in the instructions below. I apologize. It's not my fault.
- Right-click on your project in the Solution Explorer.
- Click Properties at the bottom of the drop-down menu.
- At the top left of the Properties Pages, select All Configurations from the drop-down menu.
- Open the C/C++ tree and select Precompiled Headers
- Precompiled Header: Select Use (/Yu)
- Fill in the Precompiled Header File field. Standard is stdafx.h
Lucky 13. Cross your fingers and hit Build.
This is a more basic answer than mine. Step 1-7 are necessary to get PCH working, but the error message from the question indicates those steps have already been done. OTOH, it assumes a single stdafx.pch file, while the xxxxx.pch from the question hints at a more complex problem (multi-PCH setup).
Precompiled Header (pch) use is a two-step process.
In step one, you compile a stub file (In VS200x it's usually called stdafx.cpp . Newer versions use pch.cpp .). This stub file indirectly includes only the headers you want precompiled. Typically, one small header (usually stdafx.h or pch.hpp ) lists standard headers such as and , and this is then included in the stub file. Compiling this creates the .pch file.
In step 2, your actual source code includes the same small header from step 1 as the first header. The compiler, when it encounters this special header, reads the corresponding .pch file instead. That means it doesn't have to (re)compile those standard headers every time.
In your case, it seems step 1 fails. Is the stub file still present? In your case, that would probably be xxxxx.cpp . It must be a file that's compiled with /Yc:xxxxx.pch , since that's the compiler flag to indicate it's step 1 of the PCH process. If xxxxx.cpp is present, and is such a stub file, then it's probably missing its /Yc: compiler option.
Когда я создаю свое решение на C ++ в Visual Studio, оно жалуется на отсутствие файла xxxxx.pch. Есть ли параметр, который мне не хватает, чтобы вернуть предварительно скомпилированные заголовки?
Вот точная ошибка для полноты:
ПРИМЕЧАНИЕ. Более поздние версии IDE могут использовать «pch» вместо «stdafx» в именах по умолчанию для связанных файлов. В приведенных ниже инструкциях может потребоваться заменить pch на stdafx. Я прошу прощения. Это не моя вина.
- Щелкните правой кнопкой мыши свой проект в обозревателе решений.
- Щелкните Свойства в нижней части раскрывающегося меню.
- В левом верхнем углу страниц свойств выберите в раскрывающемся меню «Все конфигурации».
- Откройте дерево C / C ++ и выберите Предварительно скомпилированные заголовки.
- Предварительно скомпилированный заголовок: выберите "Использовать" (/ Yu)
- Заполните поле Precompiled Header File. Стандарт - stdafx.h
Lucky 13. Скрестите пальцы и нажмите Build.
Я искал файл iOS PCH с той же проблемой, если вы попали сюда, как и я, решение, которое я нашел, - очистить производные данные; Закройте симуляторы, перейдите к параметрам xCode -> местоположения -> перейдите к пути к файлу производных данных, закройте xCode, удалите файлы в папке производных данных, перезапустите и приветствуйте :)
Я знаю, что эта тема очень старая, но недавно я имел дело с этим в VS2015, и что помогло, так это удаление папок сборки и ее повторная сборка. Это могло произойти из-за попытки закрыть программу или из-за остановки / зависания программы VS во время сборки.
Если все верно, но эта ошибка присутствует, необходимо проверить следующий раздел в файле ****. Vcxproj:
В моем случае это было неверное имя конфигурации: только первое слово.
Попробуйте Build> Clean Solution, затем Build> Build Solution. Это работает для меня.
AppCenter запускает команду «pod install» только в том случае, если он находит Pofile и НЕ находит папку PODS в файлах.
У меня была отмечена папка, но поскольку git автоматически игнорирует файлы .pch (проверьте .gitignore, чтобы проверить это), мой .pch не проверялся.
Я решил проблему, заставив файлы .pch проверять ее, но удаление папки PODS тоже должно работать, поскольку в этом случае Appcenter запустит команду установки модуля.
Надеюсь, это кому-то поможет.
- Щелкните правой кнопкой мыши проект и выберите пункт меню свойств.
- goto C / C ++ -> Предварительно скомпилированные заголовки
- Выберите "Не использовать предварительно скомпилированные заголовки"
Убедитесь, что в вашем проекте есть xxxxx.cpp
Скомпилируйте xxxxx.cpp с флагом / Yc ( Создать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши xxxxx.cpp -> свойства -> Предварительно скомпилированные заголовки -> создать )
Скомпилируйте все остальные файлы с флагом / Yu ( Используйте предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши проект -> свойства -> Предварительно скомпилированные заголовки -> использовать )
Использование предварительно скомпилированного заголовка (pch) - это двухэтапный процесс.
На первом этапе вы компилируете файл-заглушку (в VS200x он обычно называется stdafx.cpp . В более новых версиях используется pch.cpp .). Этот файл-заглушка косвенно включает только те заголовки, которые вы хотите предварительно скомпилировать. Обычно в одном небольшом заголовке (обычно stdafx.h или pch.hpp ) перечислены стандартные заголовки, такие как и , которые затем включаются в файл-заглушку. При компиляции создается файл .pch.
На шаге 2 ваш фактический исходный код включает тот же небольшой заголовок из шага 1, что и первый заголовок. Компилятор, когда он встречает этот специальный заголовок, вместо этого читает соответствующий файл .pch. Это означает, что ему не нужно каждый раз (пере) компилировать эти стандартные заголовки.
В вашем случае кажется, что шаг 1 не выполняется. Файл-заглушка все еще присутствует? В вашем случае это, вероятно, будет xxxxx.cpp . Это должен быть файл, скомпилированный с помощью /Yc:xxxxx.pch , поскольку это флаг компилятора, указывающий, что это шаг 1 процесса PCH. Если присутствует xxxxx.cpp и является таким файлом-заглушкой, то, вероятно, отсутствует его параметр компилятора /Yc: .
VS облажался (у меня 2019; (). Продолжайте и выберите «не использовать предварительно скомпилированные заголовки», как указывают другие ребята, затем откройте файл проекта (vcxproj) с помощью любого текстового редактора и удалите выделенные две записи в двух местах. Наслаждайтесь На самом деле, запись pch.h в файле vcxproj, которую вы видите ниже, вы всегда найдете в интерфейсах свойств VS.
Сведения о системе . Windows 10
Visual Studio Community 2017 v.15.2 (26430.6)
- Установленная разработка рабочего стола с C ++ (Снимок экрана: список установки)
Шаг 1. Я написал знаменитую программу Hello World на C ++.
Шаг 2 . Я щелкнул "Сборка"> "Собрать решение".
Проблема: 'stdio.h' : такого файла или каталога нет. Полная ошибка:
Сведения об устранении неполадок / вещи, которые я пробовал:
-
Свойства конфигурации> Каталоги VC ++
Include Directories $(VC_IncludePath);$(WindowsSDK_IncludePath);
Код в файле stdafx.cpp :
Код в файле stdafx.h :
Столкнулся с проблемой отсутствия stdlib.h и stdio.h (а может и больше) после установки VS2017 Community на новый компьютер и переноса решения с VS2013 на VS2017.
Сейчас мои проекты строятся без проблем.
Обратите внимание, что вам может потребоваться сделать проект стартовым проектом для ретаргетинга.
Подобная проблема для меня, но немного другая. Я могу без проблем скомпилировать и запустить код CUDA 10 по умолчанию, но есть много ошибок, связанных с файлом stdio.h, показанным в окне редактирования. Что раздражает. Я решаю это путем изменения имени файла кода с «kernel.cu» на «kernel.cpp». Это связано, но работает для меня. И пока все идет хорошо.
У меня была такая же проблема при создании проекта VS 2013 с помощью Visual Studio 2017 IDE. Решением было установить правильный «Platformtoolset v120 (Visual Studio 2013). Для этого должен быть установлен Windows SDK 8.1. Если вы хотите использовать Platformtoolset v141 (Visual Studio 2017), должен быть Windows SDK 10. Можно выбрать Platformtoolset». внутри диалога свойств проекта: Общие -> Platformtoolset
У меня была похожая проблема после обновления моего VS2017. Проект построен хорошо; но много «ошибок», когда код был поднят в редакторе. Даже попробовал переустановить VS. Я смог решить эту проблему, установив для параметра «Игнорировать стандартные пути включения» значение «Да». Попытка построить решение с большим количеством ошибок. Вернулся и установил опцию на Нет. После восстановления моя проблема ушла.
Если вы не хотите использовать Windows SDK для Windows 10 (например, вы можете работать над проектом с открытым исходным кодом, решение которого не принимается вами), вы можете решить эту проблему в проекте Windows SDK 8.1 с помощью перейдите Tools -> Get Tools and Features. -> Individual Compontents tab и установите отдельные компоненты "Windows 8.1 SDK" (в составе SDK, библиотек и сред) и "Windows Universal CRT SDK" (в разделе "Компиляторы, инструменты сборки и среды выполнения"):
Возникла такая же проблема с переносом проекта с VS2013 на VS2017,
Исправлено: измените "Свойства-> Общие-> Версия Windows SDK" на 10.
Столкнулся с той же проблемой, другое решение заключается в добавлении включает в себя по умолчанию, это исправило проблему для меня:
Грязное исправление: Добавить $ (VC_IncludePath); $ (WindowsSDK_IncludePath); в свойства проекта / C / C ++ / Общие / Дополнительные каталоги включения
Когда я собираю свое решение c ++ в Visual Studio, он жалуется на отсутствие файла xxxxx.pch. Есть ли параметр, который мне не хватает, чтобы вернуть предварительно скомпилированные заголовки?
Вот точная ошибка для полноты:
ПРИМЕЧАНИЕ. Более поздние версии IDE могут использовать «pch» вместо «stdafx» в именах по умолчанию для связанных файлов. Может быть необходимо заменить pch на stdafx в инструкциях ниже. Я извиняюсь. Это не моя вина.
- Щелкните правой кнопкой мыши свой проект в обозревателе решений.
- Нажмите Свойства в нижней части раскрывающегося меню.
- В верхнем левом углу страницы свойств выберите «Все конфигурации» в раскрывающемся меню.
- Откройте дерево C / C ++ и выберите «Предварительно скомпилированные заголовки».
- Предварительно скомпилированный заголовок: выберите «Использовать» (/ Yu)
- Заполните поле «Файл скомпилированного заголовка». Стандарт это stdafx.h
К счастью 13. Скрестите пальцы и нажмите Build.
Спасибо, сэр! Возвращаясь к своим корням C / C ++ r для нового проекта, и я чувствую себя немного спамом
Использование предварительно скомпилированного заголовка (pch) представляет собой двухэтапный процесс.
На первом этапе вы компилируете файл-заглушку (в VS200x он обычно называется stdafx.cpp . Используются более новые версии pch.cpp .). Этот стаб-файл косвенно включает в себя только те заголовки, которые вы хотите предварительно скомпилировать. Как правило, один маленький заголовок (обычно stdafx.h или pch.hpp ) перечисляет стандартные заголовки, такие как и , и это затем включается в файл-заглушку. Компиляция этого создает файл .pch.
На шаге 2 ваш фактический исходный код содержит тот же маленький заголовок, что и на шаге 1, что и первый заголовок. Когда компилятор встречает этот специальный заголовок, компилятор читает соответствующий файл .pch. Это означает, что нет необходимости (пере) компилировать эти стандартные заголовки каждый раз.
В вашем случае кажется, что шаг 1 не выполняется. Заглушка все еще присутствует? В вашем случае это, вероятно, будет xxxxx.cpp . Это должен быть файл, который скомпилирован /Yc:xxxxx.pch , так как это флаг компилятора, указывающий, что это шаг 1 процесса PCH. Если xxxxx.cpp он присутствует и является таким файлом-заглушкой, то, вероятно, ему не хватает /Yc: опции компилятора.
тогда, вероятно, отсутствует опция / Yc: compiler. Кстати, эта опция находится на страницах свойств проекта / Свойства конфигурации / C-C ++ / Предварительно скомпилированные заголовки
Убедитесь, что у вас есть xxxxx.cpp в вашем проекте
Скомпилируйте xxxxx.cpp с флагом / Yc ( Создать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши xxxxx.cpp -> Свойства -> Скомпилированные заголовки -> Создать )
Скомпилируйте все остальные файлы с флагом / Yu ( Использовать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши на проекте -> Свойства -> Предварительно скомпилированные заголовки -> Использовать )
- Щелкните правой кнопкой мыши проект и выберите пункт меню свойств
- Перейти к C / C ++ -> Скомпилированные заголовки
- Выберите «Не использовать предварительно скомпилированные заголовки»
Это сработало для меня. Я удалил «stdafx.cpp», затем, когда я добавил его обратно, эта ошибка не исчезнет, пока я не отключу предварительно скомпилированные заголовки. В любом случае, проект крошечный, поэтому он не имеет большого значения для скорости.
Не задана среда командной строки INCLUDE или LIB
Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный в переменной среды include или lib , задан неправильно, может быть сформирована ошибка C1083. Мы настоятельно рекомендуем использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок с командной строкой. Дополнительные сведения см. в разделе сборка C/C++ в командной строке. Дополнительные сведения об использовании переменных среды см. в разделе инструкции. Использование переменных среды в сборке.
Указано неверное имя файла
При вводе имени файла допущена ошибка. Например, примененная к объекту директива
может не найти файл, который вы хотели. Большинство файлов заголовков стандартной библиотеки C++ не имеют расширения h. . Чтобы устранить эту проблему, убедитесь, что указано правильное имя файла, как в следующем примере:
Проблемы с библиотекой сторонних производителей и vcpkg
если вы видите эту ошибку при попытке настроить библиотеку стороннего производителя в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущей список библиотек сторонних производителейи задает все свойства конфигурации и зависимости, необходимые для успешной сборки в рамках проекта.
Файл не включен в путь поиска включаемых файлов
Это указывает компилятору искать файл в том же каталоге, который содержит исходный файл, а затем искать в других местах, заданных средой сборки. Если кавычки содержат абсолютный путь, компилятор выполняет поиск файла только в этом расположении. Если кавычки содержат относительный путь, компилятор выполняет поиск файла в каталоге относительно исходного каталога.
Если имя заключено в угловые скобки,
Если включаемые файлы находятся в другом каталоге относительно исходного каталога и в директивах Include используется относительный путь, то вместо угловых скобок следует использовать двойные кавычки. Например, если файл myheader.h заголовка находится в подкаталоге именованных заголовков проекта, в этом примере не удается найти файл и вызывается C1083:
но этот пример работает:
Возможно, файл заблокирован или используется
Если для изменения или доступа к файлу используется другая программа, файл может быть заблокирован. Попробуйте закрыть файл в другой программе. иногда другая программа может быть Visual Studio сама по себе при использовании параметров параллельной компиляции. Если отключить параметр параллельной сборки, то эта ошибка исчезнет, а это проблема. Эта проблема также может быть вызвана другими системами параллельной сборки. Будьте внимательны при задании зависимостей файлов и проектов, чтобы порядок сборки был правильным. В некоторых случаях рекомендуется создать промежуточный проект для принудительного создания последовательности зависимостей для общего файла, который может быть создан несколькими проектами. Иногда антивирусные программы временно блокируют недавно измененные файлы для проверки. Если возможно, рассмотрите возможность исключения каталогов сборки проекта из антивирусного сканера.
Включена неправильная версия имени файла
Пример
В следующем примере создается ошибка C1083, если файл "test.h" заголовка не существует в исходном каталоге или в пути поиска include.
Сведения о том, как создавать проекты C/C++ в интегрированной среде разработки или в командной строке, а также сведения о настройке переменных среды см. в разделе проекты и сборки систем.
When I build my c++ solution in Visual Studio it complains that the xxxxx.pch file is missing. Is there a setting I am missing to get the pre-compiled headers back?
here is the exact error for completeness:
you have to provide more info. what error exactly are you getting? how is your project currently configured?
Файл находится в проекте, но не в пути поиска включаемых файлов
Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. В новом проекте используются пути поиска include по умолчанию. Может потребоваться изменить путь поиска include, чтобы добавить каталог для проекта. При компиляции в командной строке добавьте путь к переменной среды include или /I параметр компилятора, чтобы указать путь к файлу.
чтобы задать путь к каталогу включения в Visual Studio, откройте диалоговое окно страницы свойств проекта. выберите VC++ каталоги в разделе свойства конфигурации в левой области, а затем измените свойство включаемые каталоги . дополнительные сведения о каталогах для отдельных пользователей и проектов, поиск которых выполняется компилятором в Visual Studio, см. в разделе страница свойств VC++ directories. Дополнительные сведения о параметре компилятора см. в /I разделе /I (дополнительные каталоги включаемых данных).
Дополнительные причины
Вы установили пакет SDK или библиотеку стороннего производителя, но после установки пакета SDK или библиотеки не открывали новое окно командной строки разработчика. Если пакет SDK или библиотека добавляет файлы в путь поиска включаемых файлов, может потребоваться открыть новое окно командной строки разработчика, чтобы получить эти изменения переменных среды.
Файл использует управляемый код, но параметр /clr компилятора не указан. Дополнительные сведения см. в разделе /clr (компиляция среды CLR).
Файл компилируется с использованием другого /analyze параметра компилятора, чем используется для предварительной компиляции заголовков. При предварительной компиляции заголовков для проекта все должны использовать одни и те же /analyze Параметры. дополнительные сведения см. в разделе /analyze (Code Analysis).
файл или каталог был создан подсистема Windows для Linux, учитывается регистр в каждом каталоге, и указанный регистр пути или файла не соответствует регистру пути или файла на диске.
Файл, каталог или диск доступен только для чтения.
Visual Studio или средства командной строки не имеют достаточных разрешений для чтения файла или каталога. это может произойти, например, когда файлы проекта имеют разные права владения, чем процесс, выполняемый Visual Studio или программ командной строки. иногда эту ошибку можно устранить, запустив Visual Studio или командную строку разработчика от имени администратора.
Недостаточно дескрипторов файлов. Закройте часть приложений и повторите компиляцию. Эта ситуация маловероятна в обычных условиях. Однако она может возникать при построении крупных проектов на компьютере с ограниченной физической памятью.
Читайте также: