Невозможно открыть файл, включая stdafx h нет такого файла или каталога
Обновлено: 21.11.2024
Пытался скомпилировать в VS2005 Express и получил указанную выше ошибку.
Установил последнюю версию Platform SDK, содержащую afxwin.h, но получил ту же ошибку.
Вот код:
// stdafx.h : включаемый файл для стандартных системных включаемых файлов,
// или включаемые файлы, специфичные для проекта, которые часто используются, но
// меняются редко
// Microsoft Developer Studio вставит дополнительные объявления непосредственно перед предыдущей строкой.
C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include
------ Перестроить все запущено: Проект: MkRich, Конфигурация: Debug Win32 ------
Удаление промежуточных и выходных файлов для проекта 'MkRich', конфигурация 'Debug|Win32'
Компиляция.
stdafx.cpp
c:\mkrich\mkrich\stdafx.h(21) : фатальная ошибка C1083: невозможно открыть включаемый файл: 'afxwin.h': нет такого файла или каталога
Сборка журнал был сохранен в "file://c:\MkRich\MkRich\Debug\BuildLog.htm"
MkRich - 1 ошибка(и), 0 предупреждений
======= === Перестроить все: 0 успешно, 1 не удалось, 0 пропущено ===========
// stdafx.h : включаемый файл для стандартных системных включаемых файлов,
// или включаемые файлы, специфичные для проекта, которые часто используются, но
// меняются редко
// Microsoft Developer Studio вставит дополнительные объявления непосредственно перед предыдущей строкой.
Можете ли вы показать нам ТОЧНЫЙ измененный путь
Включить C:\Program Files\xxx
Заранее спасибо.
Обратите внимание, что, вопреки тому, что я сказал выше (извините!), Visual C++ Express не поддерживает разработку для MFC и/или ATL. Так что это может объяснить, почему вы не можете найти afxwin.h
Файлы, которые вы видите в Platform SDK, относящиеся к MFC, предназначены только для 64-разрядной разработки. 32-разрядная версия MFC поставляется только с платными версиями VC 2005.
Меня это разочаровывает как инструмент оценки. Придя из другого мира, я подумал, что есть лучший способ оценить инструмент, чем загрузить какой-нибудь код и попробовать его - увы, я не могу этого сделать, потому что я полагаю, что код, который я использую, не может быть скомпилирован. Я хотел попробовать код, изменить пару вещей и посмотреть, что получится.
У меня нет проблем с оплатой, но я хочу, чтобы этот инструмент был прост в использовании, помогал мне изо дня в день и не мешал мне зарабатывать для моей компании несколько долларов. Похоже, мне придется потратить серьезное время, а также деньги, просто чтобы понять, будет ли это хорошо для моей компании
Жаль, я думал, что все будет хорошо.
<р>. Я думаю, что если бы MFC и ATL были для разработчиков более прошлым опытом, то поддержка оценки была бы естественной. Знаете, что-то вроде «учись на прошлом, но смотри, что ты получишь в будущем». Вместо этого я получаю инструмент оценки, который — смотрите, вы должны изучить его, чтобы использовать его, никакие уроки из прошлого не разрешены. Извините, мне нечем помочь.Очень жаль, я был потрясен, думая, что инструменты MS наконец-то «дошли». Ммммм, пожалуй, я воспользуюсь другим инструментом .
У меня та же проблема.
"Использование Visual C++ 2005 Express Edition с Microsoft Platform SDK
"Брайан Джонсон,
Microsoft Corporation
"Вы можете использовать Visual C++ Express для создания мощных приложений .NET Framework сразу после установки. Чтобы использовать Visual C++ Express для создания приложений Win32, вам потребуется выполнить еще несколько шагов. Я перечислю действия, необходимые для создания приложений Win32 с помощью Visual C++ Express.Visual C++ 2005 Express Edition с Microsoft Platform SDK"
Я не уверен, что это сработает. Я бы попробовал, но файл слишком большой для загрузки.
Тег: фатальная ошибка C1083: Не удается открыть включаемый файл: 'afxwin.h': Нет такого файла или каталога Сборка для: Visual Studio 8 2005 Проверить работоспособность компилятора C, используя: сборка XTRADB как статическая библиотека libxtradb.lib сборка ОБРАТНАЯ СВЯЗЬ как статическая библиотека для MFC Ищем MFC найдено Не удается найти установщик проекта wix 3 не будет.
vc++ 6.0 фатальная ошибка RC1015: не удается открыть включаемый файл 'afxres.h' поселение было открыто или под чужим исходным кодом из интернета C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE Решение: в вашем проекте найдите файл заголовка и добавьте файл заголовка с именем: stdafx.h: после успешного выполнения.
1>myproject\some.cpp4 : фатальная ошибка C1083: невозможно открыть. Похоже, это связано с тем, что исходный файл PCH находится не в том же каталоге, что и проект. Поэтому, когда я иду собирать проект, VS2015 говорит, что не может скомпилировать./pch.cpp. Это не имеет ничего общего с поиском файла stdafx.h или.
В компьютерном программировании предварительно скомпилированный заголовок PCH представляет собой файл заголовка C или C++, который используется при компиляции source.cpp в первый раз с включенной функцией предварительно скомпилированного заголовка. afx в stdafx.h обозначает расширения фреймворка приложения. механизм предварительной компиляции PCH в clang разрешает произвольный доступ.
.pch создается в результате компиляции файла stdafx.cpp. Например, ниже приведен файл stdafx.h, который мы используем в PVSStudio, текст статьи сокращен для статьи: Сторонние библиотеки, включенные в проект в качестве исходных файлов, вызывают некоторую фатальную ошибку C1083: Не удается открыть предварительно скомпилированный заголовочный файл:.
устранена фатальная ошибка Visual Studio c1083 в ненужных файлах. появилось красное подчеркивание, говорящее, что невозможно открыть исходный файл stdafx.h. В Microsoft Visual C Environment Codeproject..did в Visual Studio 2017 Неустранимая ошибка C1083 Не удается открыть Включить файл Pthread H Нет такого файла или каталога Microsoft Q A.
Прокрутите вниз, пока не увидите установку Visual Studio; Нажмите изменить; Когда появится всплывающее окно, нажмите «Изменить»; В разделе «Языки программирования» > «Visual C++» убедитесь, что «Основные классы Microsoft для C++» установлены, если они не выбраны, и нажмите «Обновить». Для VS2019 приведенные выше решения мне не помогли.
Не удается сгенерировать код C++ из-за фатальной ошибки C1083 Matlab. 25 августа 2019 г. Я извиняюсь за задержку с этим продолжением, эти форумы капризничают. Visual C++ и Windows включают пути. ошибка C1083: Не удается открыть файл xyz.h в другом месте, чтобы препроцессор мог его найти или еще что-то.
IntelliSense: невозможно открыть исходный файл stdafx.h[IntelliSense: невозможно открыть исходный файл stdafx.h] Свойства проекта > Свойства конфигурации > C/C++ > Общие создать проект. Мы выбираем Windows, когда вы решите поддерживать Docker.
Закрыто. kks010 открыл этот выпуск 29 июля 2020 г. 12 комментариев. Закрыто Ошибка C1083 Не удается открыть включаемый файл. Дело не только в том, что скрипт VS не выполняет всю сборку: дополнительный шаг — это то, что мы решили вообще не требовать.
Глупый я! я не регистрировался в проекте кода как участник, поэтому я не могу это сделать! Если исходный файл включает stdafx.h, то vld.h должен быть включен после него. d:\codes\data.h3 : фатальная ошибка C1083: не удается открыть включаемый файл: 'streamio': нет.
Неустранимая ошибка UE4 C1083: Не удается открыть включаемый файл: DDCommon.h: Нет такого файла или каталога компиляции видео, босс настолько гладкий, что мой собственный не компилируется. На самом деле было обнаружено сообщение об ошибке, указанное в заголовке этой статьи.
Привет, я пытаюсь написать код на С++, это простой код, который включает в себя решение ошибки Active E1696, не может открыть исходный файл stdafx.h. Я не могу заставить компилятор подавлять массивные предупреждения в windows.h, когда я переношу его в .
Привет, я пытаюсь написать код на C++. Это простой код, который включает решение ошибки Hanoi Tower Error active E1696, не удается открыть исходный файл stdafx.h. Вы можете использовать их для ускорения компиляции, если хотите, но это не обязательно.< /p> <р>. компиляция кода Microsoft Visual C++, сгенерированного IBM Rational Rose: Невозможно открыть включаемый файл: 'stdafx.h': Нет такого файла или каталога? диалоговое окно и на вкладке Включает удалить текст в Начальные исходные включения.
Файл stdafx.h обычно используется как предварительно скомпилированный заголовочный файл. Если предварительно скомпилированный заголовок не используется, это включение не должно быть включено. Чтобы отключить его, откройте диалоговое окно «Свойства компонента Visual C++» и «Контакты и отзывы».
<р>. от IBM Rational Rose: не удается открыть включаемый файл: «stdafx.h»: нет такого файла или каталога? Как говорится в сообщении об ошибке, компилятор находит включение на вкладке «Включает», удаляет текст в «Исходные включения исходного кода».Это сообщение появляется во время компиляции Microsoft Visual C++ с помощью IBM Rational Rose: Не удается открыть включаемый файл: 'stdafx.h': Нет такого файла или и на вкладке Включает удалить текст в начальном исходном включении.
E1696 не может открыть исходный файл stdafx.h во время компиляции Оба описанных выше подхода не решают проблему. Это проект MFC на vs2015, я также включаю некоторые функции ядра, основанные на cuda. есть три у.е. и.
Ошибка C1083 Не удается открыть включаемый файл: «stdafx.h»: нет такого файла или каталога. я пытался отлаживать миллионы раз, я пытался найти решение в Интернете, но безрезультатно. можно.
Предварительно скомпилированные заголовки. Разбор заголовочных файлов системных библиотек на удивление дорог. Типичный исходный файл содержит менее тысячи строк кода. Напротив.
Запросить функцию. Нам не удалось получить этот отзыв. Это может быть потому, что у вас нет доступа к нему или он не существует. Повторите попытку после входа.
В предварительно скомпилированном формате заголовка Clang десериализация объявления, являющегося DeclContext, представляет собой операцию, отдельную от десериализации всех сохраненных объявлений.
Заголовки префиксов обычно предварительно компилируются, чтобы сократить время компиляции. Использование заголовков префиксов не по назначению может усложнить код.
Недавно я столкнулся с проблемой, что некоторые перкомпилированные заголовки, такие как stdafx.h, почему-то недоступны в MinGW. Я знаю, что есть и другие компиляторы.
Не удается открыть включаемый файл: 'stdafx. h': Нет такого файла или каталога 2 ; ошибка: окна. больше, чтобы открыть и обработать исходники. h отсутствует в Visual Studio 2015 RC.
cpp файлы ясно, что StdAfx.h включает в себя все заголовки, которые должны быть предварительно скомпилированы, в то время как StdAfx.cpp отвечает за создание файла .pch. В VS выбираем
Ошибка C++ Visual Studio 2017 Невозможно открыть включаемый файл:.h: ни один такой файл или код C++ не столкнется с этой проблемой, думая, что включаемый каталог не существует.
Использование функции strcpy в vs2019 сообщит об ошибке, общее значение которой заключается в том, что функция небезопасна, рекомендуется использовать функцию strcpys
Я скачал код онлайн, и после открытия vs2015 возникает проблема: Не удается открыть исходный файл math.h Причина: Этот проект был написан в> vs2015.
Возможно, у вас нет к нему доступа или он не существует. Повторите попытку после входа. Сведения об ошибке: [
Прибрежные системы являются одними из самых динамичных физических систем на земле и подвержены фатальной ошибке RC1015: невозможно открыть включаемый файл 'afxres.h'.
В компьютерном программировании предварительно скомпилированный заголовок PCH представляет собой заголовочный файл C или C++, который скомпилирован в промежуточную форму, которая быстрее обрабатывается.
Несмотря на то, что он выдает такую ошибку, компилятор работает успешно. Эта проблема будет возникать при разработке в младших версиях VS2005/VS2008 и.
h, вызывающий странные ошибки во время компиляции. Довольно часто все заканчивается тем, что они старательно отключают все предкомпилированные заголовки в каждом проекте.
Вам необходимо проверить настройки проекта в C++, проверить включенные каталоги и убедиться, что это ошибка C++: невозможно открыть исходный файл stdafx.h CodeProject.
Указывает компилятору создать предварительно скомпилированный файл header.pch, который представляет состояние компиляции в определенный момент. Синтаксис. /Yc /Ycимя_файла.
На Reddit было проголосовано множество статей о том, что sourceforge — это Спасибо за ваше понимание. Я получил несколько ошибок, не включая stdafx.h, но добавляя его.
Ошибка C++: невозможно открыть исходный файл stdafx.h CodeProject. Насколько мне известно, это Учебник по программированию на C 10 Создание файла заголовка YouTube. Имя.
<р>. Ошибка C1083 Не удается открыть включаемый файл: 'trcRecorder.h': такого файла нет или не добавлен код средства записи трассировки, и это является причиной вашей проблемы.Затем компилятор получает указание предварительно скомпилировать этот заголовочный файл. Это создает новый файл, который теперь находится в двоичном формате, доступном только для компилятора.
Хорошо, если один из предварительно скомпилированных заголовков изменится, Visual Studio автоматически воссоздаст файл .pch для вас. Итак.
Насколько мне известно, это предварительно скомпилированный заголовочный файл. Он помогает ускорить работу приложения C++. Обратите внимание на двойные кавычки, что означает это.
Насколько мне известно, это предварительно скомпилированный заголовочный файл. Он помогает ускорить работу приложения C++. Обратите внимание на двойные кавычки, что означает это.
Во-вторых: не рекомендуется включать предварительно скомпилированный заголовок в ваши собственные заголовки, чтобы не загромождать пространство имен другого источника, который может использовать ваш.
Насколько мне известно, это предварительно скомпилированный заголовочный файл. Он помогает ускорить работу приложения C++. Обратите внимание на двойные кавычки, что означает это.
Во-вторых: не рекомендуется включать предварительно скомпилированный заголовок в ваши собственные заголовки, чтобы не загромождать пространство имен другого источника, который может использовать ваш.
Насколько мне известно, это предварительно скомпилированный заголовочный файл. Он помогает ускорить работу приложения C++. Обратите внимание на двойные кавычки, что означает это.
Файл stdafx.h обычно используется как предварительно скомпилированный заголовочный файл. Предварительно скомпилированные заголовки помогают ускорить компиляцию, когда группа файлов находится в одном.
Сбой сборки: отсутствует файл afxres.h, принадлежащий MFC. Что может и не смог найти вариант с названием именно MFC для x86 и x64.
Я использую Microsoft Visual C++ 2010 Express. Когда я пытаюсь собрать решение Everything.sln, он говорит, что отсутствуют 2 файла. Ниже приведен а.
В вашем случае, поскольку вы, вероятно, начали с проекта шаблона, он использовался для включения Windows.h только для макроса TCHAR. Затем прекомпилируется.
<р>. в Visual Studio 2019 и скомпилируйте все решение или только проект A. Я получаю сообщение об ошибке E1696, не могу открыть исходный файл stdafx.h.h, как я всегда делал в Visual Studio 2017, появилось изогнутое красное подчеркивание, говорящее, что невозможно открыть исходный файл stdafx.h. Когда.
Не удается открыть файл типа файла: 'файл': сообщение. Компилятор Большинство заголовочных файлов стандартной библиотеки C++ не имеют расширения имени файла a.h.
Это сообщение появляется во время компиляции кода Microsoft Visual C++, сгенерированного IBM Rational Rose: Не удается открыть включаемый файл:.
h /.cpp file: не удается открыть исходный файл stdafx.h, некоторые найденные методы не работают. Несмотря на эту ошибку, программа успешно запущена.
Б. он используется в любом заголовочном файле, который включает предварительно компилируемый заголовочный файл. начало файла проекта файла PCH должно быть в начале. Вы должны включить указанный файл для создания. в. h файл (файл CPP включен. Значение по умолчанию — stdafx.CPP), если не включен, выдаст первую ошибку. если его нет в начале, это приведет к неожиданным и необъяснимым ошибкам. Если не верите, стоит ли попробовать?
C. предварительно скомпилированный файл. Генерация PCH занимает много времени, а также занимает место на диске после генерации, обычно 5-6 Мб. Учтите, что чистить после завершения проекта бесполезно. PCH для экономии места на диске.
D. если он потерян или удален. когда вам нужно изменить файл проекта позже. Файл CPP (по умолчанию: stdafx. CPP) повторно компилируется один раз для повторного создания. файл PCH. Не используйте F7 или перестройте все.
(Кажется, этот человек не очень хорошо разбирается в литературных способностях Б, но я много раз читал эту статью.
-Автор: Те Гу)
--------- -------------------------------------------------- ------------------
Проблема
Это сообщение появляется во время компиляции Microsoft Visual? Код C++, сгенерированный IBM, рациональный? Роза? :
"Не удается открыть включаемый файл: 'stdafx.H': нет такого файла или каталога"?
Несколько мелких вопросов! Пожалуйста, спросите:
(1 ).
Есть. PCH объединить заголовок прекомпиляции? Так в чем же разница между ним и stdafx. h.
(2 ).
Когда я устанавливаю параметр в Project/setting, я хочу выбрать параметр!
Автоматическое использование заголовков прекомпиляции
Создать файл заголовка прекомпиляции [. PCH]
Использовать заголовочный файл предварительной компиляции [. ПЧ]
Есть ли а. Параметр PCH, который требует вставки имени проекта. ПЧ? Какая связь между ним и stdafx. h?
(3 ).
Есть также огромный запас:
"Сначала получите часть широко используемой стандартной библиотеки C++ (например, STL) в заголовке прекомпиляции, чтобы увеличить эффективности zookeeper 』
Что нам делать?
Являются ли эти iostream.H, vector.H и list.H помещенными в заголовок прекомпиляции?
Где это?
Слишком много!
----------------------------------------------------------- -------------------------------------
(Метод тайваньской клетки. Автор:-tie Gu)
Эта статья предназначена для тех программистов, которые только начинают работать в среде Visual Studio и пытаются компилировать в ней свои проекты на C++. В незнакомой среде все может выглядеть странно и сложно, а новичков особенно раздражает файл stdafx.h, вызывающий странные ошибки при компиляции. Довольно часто все заканчивается тем, что они старательно отключают все предкомпилированные заголовки в каждом проекте. Мы написали эту статью, чтобы помочь новичкам в Visual Studio разобраться во всем этом.
Назначение предварительно скомпилированных заголовков
Предварительно скомпилированные заголовки предназначены для ускорения сборки проекта. Приступая к работе с Visual C++, программисты обычно пробуют его на очень небольших проектах, которые не могут показать прирост производительности от использования предварительно скомпилированных заголовков. И с ними, и без них программа компилируется одинаково. Это как раз то, что смущает пользователя; он не видит в этой опции никакой пользы, и делает вывод, что она нужна для каких-то конкретных задач и никогда ему не понадобится. Это заблуждение может длиться годами.
Предварительно скомпилированные заголовки на самом деле очень полезная технология. Выгоду можно увидеть даже с проектом всего из нескольких десятков файлов. Использование таких тяжелых библиотек в качестве буста сделает прирост производительности особенно заметным.
Если вы изучите файлы *.cpp в своем проекте, то заметите, что многие из них содержат одни и те же наборы заголовков, например , , . Эти заголовки, в свою очередь, включают в себя другие заголовки и т. д.
Объем работы, который должен выполнять препроцессор во время компиляции проекта, может быть значительно уменьшен. Идея состоит в том, чтобы предварительно обработать группу файлов, а затем просто вставить уже подготовленные текстовые фрагменты, где это необходимо.
На самом деле он включает в себя еще несколько шагов; вместо простого текста можно хранить более высокообработанную информацию. Мы не знаем, как именно это все реализовано в Visual C++, но я знаю, что, например, можно хранить уже разбитый на лексемы текст. Это еще больше ускорит процесс компиляции.
Как работают предварительно скомпилированные заголовки
Файл, содержащий предварительно скомпилированные заголовки, имеет расширение «.pch». Имя файла обычно совпадает с названием проекта, но вы, естественно, можете изменить это и любые другие используемые имена в настройках. Файл *.pch может быть довольно большим, что зависит от того, сколько заголовков в нем развернуто. В PVS-Studio, например, он занимает около 3 Мбайт.
Самое интересное хранится в файле stdafx.h. В него должны быть включены все заголовочные файлы, которые необходимо предварительно скомпилировать. Например, ниже показан файл stdafx.h, который мы используем в PVS-Studio (текст статьи сокращен):
Теперь файл «stdafx.h» должен быть включен во все файлы *.c/*.cpp.Вы также должны удалить из этих файлов все заголовки, уже включенные в «stdafx.h».
Но что делать, если в разных файлах используются несколько похожие, но все же разные наборы заголовков? Например:
Следует ли создавать отдельные предварительно скомпилированные заголовки? Ну, вы можете сделать это, но вам не нужно.
Вам нужно создать только один предварительно скомпилированный заголовок, в котором , и будут развернуты. Выгода от того, что препроцессору не нужно читать несколько файлов и вставлять их друг в друга, перевешивает потери на синтаксическом анализе дополнительных фрагментов кода.
Как использовать предварительно скомпилированные заголовки
При запуске нового проекта мастер Visual Studio создает два файла: stdafx.h и stdafx.cpp. Именно через них реализован механизм прекомпилируемых заголовков.
На самом деле эти файлы могут иметь любые другие имена; важно не название, а параметры компиляции, которые вы указываете в настройках проекта.
Файл *.c/*.cpp может использовать только один предварительно скомпилированный заголовок. Однако один проект может содержать несколько разных предварительно скомпилированных заголовков. Предположим, что пока у нас есть только один.
Таким образом, если вы использовали мастер, файлы stdafx.h и stdafx.cpp уже созданы для вас, а также определены все необходимые параметры компиляции.
Если вы не использовали параметр предварительно скомпилированных заголовков в своем проекте, давайте узнаем, как его включить. Предлагаю следующий алгоритм:
- Включить предварительно скомпилированные заголовки во всех конфигурациях для всех файлов *.cpp. Это можно сделать на вкладке «Предварительно скомпилированный заголовок»:
- Установите значение «Использовать (/Yu)» для параметра «Предварительно скомпилированный заголовок».
- Установите «stdafx.h» для параметра «Предварительно скомпилированный файл заголовка».
- Установите «$(IntDir)$(TargetName).pch» для параметра «Предварительно скомпилированный выходной файл заголовка».
Теперь мы включили опцию предварительно скомпилированных заголовков. Если мы запустим компиляцию сейчас, компилятор создаст файл *.pch. Однако компиляция прервется чуть позже из-за ошибок.
Заголовок «stdafx.h» должен быть самым первым для включения в файл *.c/*.cpp. Это обязательно! В противном случае вы гарантированно получите ошибки компиляции.
Если подумать, это действительно имеет смысл. Когда файл «stdafx.h» включен в самом начале, вы можете подставить в файл уже предварительно обработанный текст. Этот текст всегда остается неизменным и ни на что не влияет.
Лайфхак
Сторонние библиотеки, включенные в проект в качестве исходных файлов, создают дополнительные проблемы. Изменение этих файлов не имеет смысла. Лучшим решением будет отключить для них предварительно скомпилированные заголовки, но это неудобно при использовании ряда небольших библиотек. Вы будете постоянно спотыкаться о предварительно скомпилированные заголовки.
Однако есть более простой способ обработки предварительно скомпилированных заголовков. Этот метод не является универсальным, но во многих случаях он мне помогал.
Перейдите на вкладку «Дополнительно». Выберите все конфигурации. В поле «Forced Included File» напишите следующий текст:
Отныне «stdafx.h» будет автоматически включаться в начало ВСЕХ компилируемых файлов. ПРИБЫЛЬ!
Что включать в stdafx.h
Это очень важный вопрос. Бездумное включение каждого отдельного заголовка в «stdafx.h» замедлит процесс компиляции, а не ускорит его.
Все файлы, содержащие «stdafx.h», зависят от их содержимого. Предположим, что «stdafx.h» включает в себя файл «X.h». Небольшое изменение «X.h» может привести к полной перекомпиляции всего проекта.
Важное правило. Убедитесь, что ваш файл «stdafx.h» включает только те файлы, которые никогда или ОЧЕНЬ редко изменяются. Лучшими кандидатами являются заголовки из системных и сторонних библиотек.
Если вы включаете собственные файлы проекта в «stdafx.h», будьте особенно осторожны. Включайте только те файлы, которые изменяются очень-очень редко.
Если какой-либо файл *.h меняется раз в месяц, это слишком часто. В большинстве случаев для внесения всех необходимых правок в h-файл требуется не один раз — обычно 2 или 3 раза. Полностью перекомпилировать весь проект 2 или 3 раза довольно неприятно, не так ли? Кроме того, все ваши коллеги должны будут сделать то же самое.
Но не относитесь к неизменяемым файлам слишком фанатично. Включайте только те заголовки, которые вы используете очень часто. Включать смысла не будет, если нужно всего в паре файлов. Вместо этого просто включите этот файл там, где это необходимо.
Несколько предварительно скомпилированных заголовков
Для чего может понадобиться несколько предварительно скомпилированных заголовков в одном проекте? Ну, это действительно довольно редкая ситуация. Но вот пара примеров.
Представьте, что в проекте одновременно используются файлы *.c и *.cpp. Использовать для них общий файл *.pch нельзя — компилятор выдаст ошибку.
Необходимо создать два файла *.pch. Один из них создается после компиляции C-файла (xx.c), другой — после компиляции C++-файла (yy.cpp).Соответственно, в настройках нужно указать использовать один прекомпилированный заголовок для C-файлов, а другой для C++-файлов.
Примечание. Не забудьте задать разные имена для этих двух файлов *.pch. В противном случае они будут заменять друг друга.
Вот другая ситуация:
Одна часть проекта использует одну большую библиотеку, а другая часть использует другую большую библиотеку.Естественно, разные части проекта не должны знать об обеих библиотеках: может быть (к несчастью) совпадение имен сущностей в разных библиотеках.
Логично создать два предварительно скомпилированных заголовка и использовать их в разных частях программы. Как мы уже упоминали, вы можете использовать любые имена для файлов, из которых создаются файлы *.pch. Ну и даже имя файла *.pch тоже можно поменять. Конечно, все это нужно делать очень аккуратно, но в использовании двух предварительно скомпилированных заголовков нет ничего особенно сложного.
Типичные ошибки при использовании предварительно скомпилированных заголовков
Теперь, когда вы внимательно прочитали приведенный выше текст, вы поймете и устраните все ошибки, связанные с stdafx.h. Но предлагаю еще раз быстро просмотреть типичные ошибки начинающих программистов и разобраться в их причинах. Практика делает совершенным.
Неустранимая ошибка C1083: не удается открыть предварительно скомпилированный заголовочный файл: «Debug\project.pch»: нет такого файла или каталога
- Файл stdafx.cpp еще не скомпилирован, поэтому файл *.pch еще не создан. Это может произойти, например, когда вы сначала очищаете решение, а затем пытаетесь скомпилировать один файл *.cpp (Компилировать Ctrl-F7). Чтобы решить проблему, скомпилируйте все решение или хотя бы файл stdafx.cpp.
- В настройках не указан файл для генерации файла *.pch, то есть проблемы с ключом компиляции /Yc. Эта проблема характерна для новичков в Visual Studio, которые впервые пытаются использовать предварительно скомпилированные заголовки в своем проекте. Чтобы узнать, как это сделать правильно, см. выше раздел «Как использовать предварительно скомпилированные заголовки».
Текст ошибки говорит сам за себя, если вы потрудитесь его прочитать. Файл компилируется с ключом /Yu. Это означает, что должен использоваться предварительно скомпилированный заголовок, но в файле отсутствует «stdafx.h».
Если вы не можете этого сделать, не используйте предварительно скомпилированный заголовок для этого файла *.c/*.cpp. Удалите переключатель /Yu.
Неустранимая ошибка C1853: предварительно скомпилированный заголовочный файл «project.pch» относится к предыдущей версии компилятора, или предварительно скомпилированный заголовок относится к C++, и вы используете его из C (или наоборот)
Проект содержит файлы C (*.c) и C++ (*.cpp). Для них нельзя использовать общий предварительно скомпилированный заголовок (файл *.pch).
- Отключить предварительно скомпилированные заголовки для всех C-файлов. Практика показывает, что файлы *.c препроцессируются в несколько раз быстрее, чем файлы *.cpp. Если у вас всего несколько файлов *.c, вы не потеряете в производительности, отключив для них предварительно скомпилированные заголовки.
- Создайте два предварительно скомпилированных заголовка. Первый должен быть сгенерирован из stdafx_cpp.cpp, stdafx_cpp.h; второй из stdafx_c.c, stdafx_c.h. Соответственно, вы должны использовать разные предварительно скомпилированные заголовки для файлов *.c и *.cpp. Разумеется, имена файлов *.pch тоже должны быть разными.
Компилятор работает некорректно при использовании предварительно скомпилированных заголовков
Взгляните на этот пример:
Этот код не скомпилируется, компилятор выдаст странное сообщение об ошибке:
Правильный код должен выглядеть так:
Еще один пример:
Содержимое файла my.h использоваться не будет. В результате вы не сможете использовать функции, объявленные в этом файле. Такое поведение сильно смущает программистов. Они пытаются «вылечить» его, полностью отключив предварительно скомпилированные заголовки, а потом придумывают истории о том, насколько глючен Visual C++. Помните одну вещь: компилятор — это один из инструментов с наименьшим количеством ошибок. В 99,99% случаев злиться надо не на компилятор, а на ошибки в собственном коде (Proof).
Еще один способ – использовать принудительно включенный файл. Смотрите раздел «Лайфхак» выше.
Проект полностью перекомпилируется при использовании предварительно скомпилированных заголовков
Вы добавили в stdafx.h файл, который регулярно редактируете. Или вы могли включить автоматически сгенерированный файл по ошибке.
Внимательно изучите содержимое файла stdafx.h: он должен содержать только те заголовки, которые никогда не меняются или изменяются очень редко. Имейте в виду, что хотя некоторые включаемые файлы не изменяются сами по себе, они могут содержать ссылки на другие файлы *.h, которые изменяют это.
Происходит что-то странное
Иногда вы можете столкнуться с проблемой, когда ошибка не исчезает даже после исправления кода. Отладчик сообщает о чем-то странном.
Эта проблема может быть связана с файлом *.pch. Компилятор почему-то не замечает, что один из заголовочных файлов был изменен, поэтому не перекомпилирует файл *.pch, а продолжает вставлять ранее сгенерированный текст.Это могло быть вызвано какими-то ошибками, связанными со временем модификации файла.
Это ОЧЕНЬ редкая ситуация. Но это возможно, и вы должны знать об этом. Лично я сталкивался с этой проблемой всего 2 или 3 раза за многолетнюю карьеру. Ее можно решить путем полной перекомпиляции проекта.
Кстати, вы можете скачать PVS-Studio и проверить свою программу на наличие ошибок.
Заключение
Как видите, работать с предварительно скомпилированными заголовками довольно просто. Программисты, которые пытаются их использовать и постоянно сталкиваются с «многочисленными ошибками компилятора», просто не понимают принципов работы этого механизма. Мы надеемся, что эта статья помогла вам преодолеть это недоразумение.
Предварительно скомпилированные заголовки — очень полезная опция, позволяющая значительно повысить скорость компиляции проекта.
Я пытаюсь скомпилировать код C++ с помощью mex, но не могу его успешно скомпилировать. Читая некоторые связанные блоги, я установил Microsoft Visual C++ 2010 Express и Windows Software Development Kit (SDK) 7.1, но все равно выдает эту ошибку:
>>>> facePart.cpp(5): фатальная ошибка C1083: невозможно открыть включаемый файл: 'stdafx.h': нет такого файла или каталога
Кстати, после ввода mex -setup мне выдает что-то вроде этого: Пожалуйста, выберите компилятор для сборки MEX-файлов:
Выберите компилятор: [1] Microsoft Visual C++ 2010 Express в C:\Program Files (x86)\Microsoft Visual Studio 10.0
Компилятор: Microsoft Visual C++ 2010 Express Расположение: C:\Program Files (x86)\Microsoft Visual Studio 10.0
****************************************************** ************************** Предупреждение: MEX-файлы, сгенерированные с помощью Microsoft Visual C++ 2010, требуют, чтобы библиотеки времени выполнения Microsoft Visual Studio 2010 были доступны на компьютер, на котором они работают. Если вы планируете распространять свои MEX-файлы среди других пользователей MATLAB, убедитесь, что у них есть библиотеки времени выполнения. ******************************************************* *************************
Попытка обновить файл параметров: C:\Users\JOY\AppData\Roaming\MathWorks\MATLAB\R2011a\mexopts.bat Из шаблона: C:\PROGRA~1\MATLAB\R2011a\bin\win64\mexopts\msvc100freeopts .bat
1 комментарий
Прямая ссылка на этот комментарий
Прямая ссылка на этот комментарий
Принятый ответ
Прямая ссылка на этот ответ
Прямая ссылка на этот ответ
Находится ли файл stdafx.h в вашем текущем каталоге? Фактически весь исходный код и включаемые файлы находятся в вашем текущем каталоге?
3 комментария
Прямая ссылка на этот комментарий
Прямая ссылка на этот комментарий
это еще одна проблема, с которой я столкнулся на самом деле. Я новичок в этом, поэтому, когда я получил эту ошибку, я попытался найти, где находится stdafx.h на моем компьютере, но, похоже, он не существует. Что касается исходного кода, файлов include и lib, я ввел строки команд для указания пути. это примерно так:
OCVRoot = 'c:\opencv\build'; IPath =-Ic:\opencv\build\include; OCVRoot = 'c:\opencv\build\X86\VC10'; LPath = полный файл (OCVRoot, 'lib'); lib1 = полный файл (LPath, 'opencv_imgproc244d.lib'); lib2 = полный файл (LPath, 'opencv_core244d.lib'); lib3 = полный файл (LPath, 'opencv_highgui244d.lib'); mex('facePart.cpp', IPath, lib1, lib2, lib3);
..что логически похоже на то, что я делал вручную при компиляции кода в Visual Studio c++ ide, с установленным флажком предварительно скомпилированного заголовка, и все работало хорошо.
Читайте также: