Не удается открыть источник файл pch h

Обновлено: 02.07.2024

Прошу перестать придумывать новые способы инклюдить PCH.H
Строка включения PCH.H должна быть первой в .CPP файле и должна выглядеть, как:

Отключение его полностью не принимается. PCH используется другими разработчиками проекта, и ваш код БУДЕТ исправлен, потому в настройках прописано использование РСН, и иначе он не скомпилится.

Неверное написание "stdafx.h", "gb/pch.h" не принимается. Ваш код БУДЕТ исправлен, потому что иначе он не скомпилится.

Если у вас не находит pch.h, и вы не используете проект CMake, будьте добры прописать папку gameboost/ и gameboost/gb/ в пути инклюдов. Если вы используете проект CMake - эти настройки уже сделаны, всё работает само собой.

pch превращает библиотеку независимых модулей в один тупой неюзабельный монолит. печально.

EvilSpirit
чёчё ??

нажал на кнопу.. бац и сразу запустилось..

не надо инклюды прописывать.. Это ж только для cpp а не для h

ksacvet777
> Это ж только для cpp а не для h
80% инклюдов из pch нужны уже в .h

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

EvilSpirit
Ну .. на крайняк потом можно ввести макрос .. например GB_USE_PCH .

Я делал так:
В файле ks_inc_c.h - подключение всех си либ.
В файле ks_inc_cpp.h - подключение всех си++ либ.

м.. не то чтобы всех.. просто основных . .самых самых.

Блин, давайте сделаем правило, что я должен обязательно перед коммитом три раза кувыркнуться, иначе не скомпилится :)
Если у меня, допустим, код компилируестя безо всяких бустов и pch, то почему у кого-то не скомпилируется - объясните. Кажется одмины уже забывают, для чего вообще нужна либа и отрываются как хотят.

Zefick
> Блин, давайте сделаем правило,
А давайте сделаем правило, что каждый пишет как хочет, подключает что хочет, и проект не нужен вообще?
Давайте я накачаю за 15 мин разносортных либ из интернета, скажу вот вам новый геймбуст, компильте его как хотите.

Идея сделать одинаково и удобно всем.
Чтоб компилилось одинаково с одними и теми же настройками. Для этого настроен CMake, пользуйтесь.
Не нравится CMake? Возьмите на себя обязанность постоянно обновлять проект студии и положите его в новую папку, например projects/ это означает все новые добавления и настройки должны в разумный срок попадать в этот проект, вашими усилиями. Вероятно все борцы против PCH откажутся ;)

PCH нужен для тех, кто компилит с включенным Boost.
Отключить его, не сломав не вижу возможности.

kvakvs
> Для этого настроен CMake, пользуйтесь.
Пользователям то же самое скажете? Мне зачем ваш CMake впёрся, если свои исходники я и без него могу скомпилировать? А чужие уж как-нибудь тоже запущу, если понадобится, но пока только смотреть и можно.

> Возьмите на себя обязанность постоянно обновлять проект студии
Какой студии? Я ей уже года два не пользуюсь. Что значит эта фраза?

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

> > Возьмите на себя обязанность постоянно обновлять проект студии
> Какой студии? Я ей уже года два не пользуюсь. Что значит эта фраза?
Можно было в прошлом ответе написать чем же именно и не ждать этого вопроса? Так чем же?

Кто не хочет PCH, просто прописывает в инклюд пути папку nopch/ с пустым файлом, остальные получают из CMake или прописывают вручную папку pch/

kvakvs
> Не вижу никаких причин городить собственные солюшены и проекты.
Ну хочу я сделать свой солюшн, что такого. Может у меня вообще свой мейкфайл, руками написанных, кому какое дело. Я же не заставляю никого им пользоваться, (в отличие от). Я исходники коммичу, а дальше пусть уже люди хоть в свои проекты под них делают, хоть в CMake вставляют. Объясните почему если не заинклюдить pch, то файл не скомпилируетя?

> Так чем же?
Если это важно, то MinGW, но вообще мы же под любой компилятор вроде делаем?

Zefick
> Если это важно, то MinGW, но вообще мы же под любой компилятор вроде делаем?
Да, стараемся.
Поэтому я настроил CMake :)

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

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

Вы должны предоставить больше информации. какую именно ошибку вы получаете? как настроен ваш проект? Просто простая перестройка все исправила мою проблему.

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

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

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

Я не знал, что stdafx.cpp должен иметь разные настройки. Отличный ответ. Это должен быть принятый ответ, так как в другом нет шагов 10 и 11. Спасибо! Спасибо, сэр! Возвращаясь к своим корням C / C ++ r для нового проекта, и я чувствую себя немного спамом

Использование предварительно скомпилированного заголовка (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: опции компилятора.

тогда, вероятно, отсутствует опция / Yc: compiler. Кстати, эта опция находится на страницах свойств проекта / Свойства конфигурации / C-C ++ / Предварительно скомпилированные заголовки

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

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

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

На этом уроке мы рассмотрим наиболее частые проблемы, с которыми сталкиваются новички при написании программ на языке C++.

Проблема №1

Как использовать кириллицу в программах C++?

Ответ №1

Чтобы выводить кириллицу в языке C++ нужно подключить заголовочный файл <Windows.h>:

И прописать следующие две строки в функции main():

В качестве альтернативного варианта можно использовать следующую строку в функции main():

Проблема №2

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

Ответ №2

Некоторые компиляторы (например, Bloodshed’s Dev C++) автоматически не задерживают консольное окно после того, как программа завершила свое выполнение. Если проблема в компиляторе, то следующие два шага решат эту проблему:

Шаг №1: Добавьте следующую строку кода в верхнюю часть вашей программы:

Шаг №2: Добавьте следующий код в конец функции main() (прямо перед оператором return):

Таким образом, программа будет ожидать нажатия клавиши, чтобы закрыть консольное окно. Вы получите дополнительное время, чтобы хорошенько всё рассмотреть/изучить. После нажатия любой клавиши, консольное окно закроется.

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

Примечание: Visual Studio не задерживает консольное окно, если выполнение запущено с отладкой ( "Отладка" > "Начать отладку" или F5 ). Если вы хотите, чтобы была пауза — воспользуйтесь решением выше или запустите программу без отладки ( "Отладка" > "Запуск без отладки" или Ctrl+F5 ).

Проблема №3

Ответ №3

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

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

Проблема №4

Ответ №4

Убедитесь, что вы не перепутали букву l (нижний регистр L ) в endl с цифрой 1 . В endl все символы являются буквами. Также легко можно перепутать заглавную букву О с цифрой 0 (ноль).

Проблема №5

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

Ответ №5

Выполните отладку программы. Детально об этом читайте на уроке №26 и на уроке №27.

Проблема №6

Как включить нумерацию строк в Visual Studio?

Ответ №6

Перейдите в меню "Средства" > "Параметры" :


Затем откройте вкладку "Текстовый редактор" > "Все языки" > "Общие" и поставьте галочку возле "Номера строк" , затем нажмите "ОК" :



Проблема №7

Ответ №7

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

Здесь есть несколько пунктов, которые нужно проверить:

Есть ли в вашей программе функция main() ?

Слово main написано правильно?

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

Подключен ли файл, содержащий функцию main() , к компиляции?

Проблема №8

Ответ №8

Это не ошибка, а предупреждение. На работоспособность вашей программы оно не повлияет. Тем не менее, в Visual Studio вы можете решить всё следующим образом: перейдите в меню "Отладка" > "Параметры" > "Отладка" > "Символы" и поставьте галочку возле "Серверы символов (Майкрософт)" , затем нажмите "ОК" .

Проблема №9

Я использую Code::Blocks или G++, но функционал C++11/C++14 не работает.

Ответ №9

В Code::Blocks перейдите в "Project" > "Build options" > "Compiler settings" > "Compiler flags" и поставьте галочку возле пункта "Have g++ follow C++14 ISO C++ language standard" . Смотрите урок №4 — там есть скриншоты, как это сделать.

При компиляции в g++, добавьте следующий код в командную строку:

Проблема №10

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

Ответ №10

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

У меня есть другая проблема, с которой я не могу разобраться. Как и где я могу получить ответ?

По мере прохождения данных уроков, у вас, несомненно, появятся вопросы или вы столкнетесь с проблемами. Что делать?

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

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

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

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

  1. Щелкните правой кнопкой мыши свой проект в обозревателе решений.
  2. Щелкните Свойства в нижней части раскрывающегося меню.
  3. В левом верхнем углу страниц свойств выберите в раскрывающемся меню «Все конфигурации».
  4. Откройте дерево C / C ++ и выберите Предварительно скомпилированные заголовки.
  5. Предварительно скомпилированный заголовок: выберите "Использовать" (/ Yu)
  6. Заполните поле 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 запустит команду установки модуля.

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

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

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

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

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

Использование предварительно скомпилированного заголовка (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: .

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

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

Указано неверное имя файла

При вводе имени файла допущена ошибка. Например, примененная к объекту директива

Файл не включен в путь поиска включаемых файлов

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

Если имя заключено в угловые скобки,

Если включаемые файлы находятся в другом каталоге относительно исходного каталога и в директивах Include используется относительный путь, то вместо угловых скобок следует использовать двойные кавычки. Например, если файл заголовка myheader.h находится в подкаталоге именованных заголовков проекта, в этом примере не удается найти файл и вызывается C1083:

но этот пример работает:

Проблемы с библиотекой сторонних производителей и vcpkg

если вы видите эту ошибку при попытке настроить библиотеку стороннего производителя в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущей список библиотек сторонних производителейи задает все свойства конфигурации и зависимости, необходимые для успешной сборки в рамках проекта.

Файл находится в проекте, но не в пути поиска включаемых файлов

Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. В новом проекте используются пути поиска include по умолчанию. Может потребоваться изменить путь поиска include, чтобы добавить каталог для проекта. При компиляции в командной строке добавьте путь к переменной среды include или /I параметр компилятора, чтобы указать путь к файлу.

чтобы задать путь к каталогу включения в Visual Studio, откройте диалоговое окно страницы свойств проекта. выберите VC++ каталоги в разделе свойства конфигурации в левой области, а затем измените свойство включаемые каталоги . дополнительные сведения о каталогах для отдельных пользователей и проектов, поиск которых выполняется компилятором в Visual Studio, см. в разделе страница свойств VC++ directories. Дополнительные сведения о /I параметре компилятора см. в разделе /I (дополнительные каталоги включаемых данных).

Не задана среда командной строки INCLUDE или LIB

Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный в переменной среды include или lib , задан неправильно, может быть сформирована ошибка C1083. Мы настоятельно рекомендуем использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок с командной строкой. Дополнительные сведения см. в разделе сборка C/C++ в командной строке. Дополнительные сведения об использовании переменных среды см. в разделе инструкции. Использование переменных среды в сборке.

Возможно, файл заблокирован или используется

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

Включена неправильная версия имени файла

Предкомпилированные заголовки еще не скомпилированы

Если проект настроен для использования предварительно скомпилированных заголовков, необходимо .pch создать соответствующие файлы, чтобы можно было скомпилировать файлы, использующие содержимое заголовка. например, pch.cpp файл ( stdafx.cpp в Visual Studio 2017 и более ранних версий) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичном проекте процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе Создание предкомпилированных файлов заголовков.

Дополнительные причины

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

Файл использует управляемый код, но параметр компилятора /clr не указан. Дополнительные сведения см. в разделе /clr (компиляция среды CLR).

Файл компилируется с использованием другого параметра /analyze компилятора, чем используется для предварительной компиляции заголовков. При предварительной компиляции заголовков для проекта все должны использовать одни и те же /analyze Параметры. дополнительные сведения см. в разделе /analyze (Code Analysis).

файл или каталог был создан подсистема Windows для Linux, учитывается регистр в каждом каталоге, и указанный регистр пути или файла не соответствует регистру пути или файла на диске.

Файл, каталог или диск доступен только для чтения.

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

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

Пример

В следующем примере создается ошибка C1083, если файл заголовка "test.h" не существует в исходном каталоге или в пути поиска include.

Сведения о том, как создавать проекты C/C++ в интегрированной среде разработки или в командной строке, а также сведения о настройке переменных среды см. в разделе проекты и сборки систем.

Читайте также: