Подтвердить что ты не робот

Ошибка фатальной ошибки Visual Studio 2013 C1041/FS

Я использую Visual Studio 2013. Каждый так часто проект отказывается компилировать. Если я отменю любые изменения, он все равно не будет компилироваться. Я обнаружил, что воссоздание всего проекта работает. Однако я бы хотел решить проблему. Ошибка, которую я получаю:

1>Critic.cpp : fatal error C1041: cannot open program database 'c:\users\username\desktop\projectName\projectName\x64\debug\vc120.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS

Я пробовал следовать этим инструкциям безрезультатно: http://msdn.microsoft.com/en-us/library/dn502518.aspx

Кто-нибудь еще столкнулся с этим и нашел исправление?

4b9b3361

Ответ 1

У меня была эта проблема, потому что разные проекты в решении имели один и тот же промежуточный каталог.

изменения

$(Platform)\$(Configuration)\

в

$(Platform)\$(Configuration)\$(ProjectName)\

в

Свойства конфигурации | Генерал | Промежуточный каталог

в каждом из проектов это решено.

Ответ 2

Я согласен с PThomasCS.

Сначала я попытался использовать совет Microsoft /FS (Force Synchronous PDB Writes):

Чтобы установить этот параметр компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно "Страницы свойств проекта". Для получения дополнительной информации см. Работа со свойствами проекта.
  2. Выберите папку C/C++.
  3. Выберите страницу свойств командной строки.
  4. Измените свойство "Дополнительные параметры", чтобы включить /FS, а затем нажмите "ОК".

но это не сработало.

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

Надеюсь это поможет.

Ответ 3

на странице настроек C/С++ → Общие для каждого проекта, настройка Multi_processor компиляции на Нет помогла мне.

Ответ 4

Я обнаружил ту же проблему при компиляции libkml на VS2013 (ошибка появляется именно в проекте libkmlxsd внутри решения libkml).

Error   112 error C1041: cannot open program database 'd:\gstabel\falkermap2\libkml-1.2.0\msvc\debug\vc120.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS d:\gstabel\falkermap2\libkml-1.2.0\src\stdafx.cpp   1   1   libkmlxsd

Флаг /FS (Force Synchronous PDB Writes) работает для меня. Но я должен был установить все проекты внутри решений и перестроить все, чтобы все заработало.

Ответ 5

У меня была аналогичная проблема: репозитории С++, которые могли бы отлично подойти для других людей в моей команде, не будут корректно построены для меня (давали ошибки PBC/FS, как упоминалось в вопросе), а иногда и ошибки ссылок. Кто-то указал, что я клонировал один из репозиториев в место в моем Dropbox. Попробовав много других идей, я, наконец, сделал новый клон для не-dropbox, и решение компилируется без ошибок. Я подозреваю, что проблема может быть общей для других служб синхронизации файлов. (Box, Google drive и т.д.), Хотя я их не тестировал.

Ответ 6

если вы используете CUDA, затем установите

Проект → Свойства → CUDA C/С++ → Host → Дополнительные параметры компилятора → /FS

Ответ 7

Если у вас есть несколько проектов в рамках решения, вам нужно добавить /FS для каждого проекта, чтобы он работал. Просто выберите проект- > properties- > C/С++ → Commandline → Дополнительные параметры.

Ответ 8

У меня тоже была эта проблема, и я решил ее, удалив файл .pdb из каталога проекта и перекомпилировав

Ответ 9

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

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

Если вы используете CMake для создания файла решения, вы должны указать /FS флаг в CMAKE_C_FLAGS и/или CMAKE_CXX_FLAGS (для их просмотра вам может потребоваться отметить флажок "Дополнительно" в графическом интерфейсе CMake) и регенерировать решение.

Если вы используете CUDA, а Fillippo отмечен в его ответе, вы должны убедиться, что компилятор хоста также устанавливает флаг. Для решения, созданного в Visual Studio, установите флаг в CUDA C/С++ → Host → Дополнительные параметры компилятора на странице свойств проекта. Однако для файлов решений, созданных с помощью CMake, у вас не будет страницы свойств CUDA С++, поэтому вам нужно отредактировать конфигурацию CMake. Просто добавьте флаг /FS в CMAKE_{C,CXX}_FLAGS, как указано выше, и убедитесь, что для параметра CUDA_PROPAGATE_HOST_FLAGS установлено значение ON (которое является значением по умолчанию).

Ответ 10

Для меня это решило вручную убить процесс mspdbsrv. Что-то там иногда не обрабатывает параллельные сборки хорошо и застревает в ошибочном состоянии. Следующая сборка перезапустила сервер pdb, и все вернулось к нормальному.

Ответ 11

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

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

Ответ 12

У меня была та же проблема, и решение было очень простым: диск был полон...

Но сообщение об ошибке не очень помогло в этом случае... Я нашел его с помощью монитора процесса.

Ответ 13

У меня была та же проблема.

Для меня работало полное завершение $(IntDir).

Ответ 14

та же проблема здесь тоже

  • /FS не работает
  • Удаление файлов VS2013 не работает.
  • перезагрузка компьютера не работает.
  • удаление заголовка и исходных файлов из проекта и повторное добавление их, не работает
  • отключить Google Drive и Dropbox не работает

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

Ответ 15

Тег/FS необходимо разместить в командной строке линкера. Хорошо работать

Ответ 16

У меня была та же проблема, и каталог Intermediate был пуст для этого проекта. Поэтому принятое решение не помогло мне.

Я исправил это, выполнив чистоту и построив проект, который дал ошибку

Ответ 17

Я столкнулся с этой проблемой при сборке в Qt Creator с MSVC. Создание отсутствующей папки debug и повторная сборка устранили проблему.

Ответ 18

Я пытался построить на томе докера. Кажется, что cl.exe не может обрабатывать сопоставленные каталоги. Я скопировал файлы в несопоставленную папку, и она успешно скомпилирована.

Ответ 19

Одной из причин возникновения этой ошибки является то, что файлы pdb помечены атрибутом только для чтения. Если они есть, удалите атрибут "только для чтения" из файла.

Чтобы удалить Right Clik на PDB File → Properties → Uncheck Attributes: ReadOnly

Ответ 20

У меня была эта проблема на нескольких проектах. В этих проектах я имел <ProgramDataBaseFileName> установлен под <ClCompile> секции. Удаление раздела <ProgramDataBaseFileName> и его тега (так что Visual Studio использует значение по умолчанию) <ProgramDataBaseFileName>.

Ответ 21

У меня была такая же проблема с vs2017, созданным с помощью cmake. Я попытался добавить /FS к CMAKE_C_FLAGS и CMAKE_CXX_FLAGS, но это не помогло. Я не хотел жертвовать многопроцессорной компиляцией, потому что у меня довольно большой проект, и я хочу, чтобы мой проект создавался как можно быстрее с использованием всех ядер, доступных на моем ПК.

Поэтому вместо этого я решил переключить флаг отладки cmake по умолчанию /Zi на /Z7, который вставляет символы отладки в .obj (аналогично тому, как работает GCC/Clang) вместо создания внешнего .pdb. Это сработало для меня.

    STRING(REGEX REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
    STRING(REGEX REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")

Имейте в виду, что использование /Z7 сделает ваш бинарный файл значительно больше.

Ответ 22

Удалить весь каталог отладки.