Visual Studio 2013致命错误C1041 / FS

问题描述 投票:39回答:21

我正在使用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

有没有其他人遇到这个并找到了修复?

c++ compiler-errors visual-studio-2013
21个回答
51
投票

我有这个问题,因为解决方案中的不同项目具有相同的中间目录。

更改

$(Platform)\$(Configuration)\

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

配置属性|一般|中间目录

在每个项目中解决了它。


1
投票

为我解决的是手动杀死mspdbsrv进程。偶尔有些东西不能很好地处理并发构建,并陷入错误的状态。下一个版本重新启动了pdb服务器,所有内容都恢复正常。


1
投票

我正在运行备份服务。我的问题是,当编译器试图写出.pdb文件时,备份服务会继续从先前的编译中备份新的.pdb文件。通过从备份中排除.pdb文件,我解决了这个问题。

这种类型的问题很难追查,因为它是间歇性的。备份完成后,编译器创建新的.pdb文件时不再存在冲突,因此您可能会认为其他一些解决方案有效。


1
投票

我有同样的问题,解决方案很简单:磁盘已满...

但在这种情况下错误消息并不是很有帮助...我通过使用进程监视器找到它。


0
投票

我遇到了同样的问题。

删除完整的$(IntDir)对我有用。


0
投票

同样的问题也在这里

  • / FS没有用
  • 删除VS2013文件不起作用
  • 重新启动计算机不起作用
  • 从项目中删除标题和源文件并重新添加它们不起作用
  • 关闭谷歌驱动器和保管箱不起作用

我不得不删除损坏的副本并使用我的备份副本 - 通常每天,我将我的工作文件夹的副本放入备份驱动器


0
投票

/ FS标记需要放在链接器命令行中。工作得很好


0
投票

我遇到了同样的问题,该项目的Intermediate目录为空。所以接受的修复对我不起作用。

我通过干净修复它,并在产生错误的项目上构建


0
投票

我在使用MSVC在Qt Creator中构建时遇到了这个问题。创建缺少的debug文件夹并重建修复了该问题。


0
投票

我试图在docker卷上构建。似乎cl.exe无法处理映射的目录。我将文件复制到非映射文件夹并成功编译。


0
投票

可能发生此错误的原因之一是pdb文件标有只读属性。如果是,请从文件中删除只读属性。

要删除右键单击PDB文件 - >属性 - >取消选中属性:ReadOnly


8
投票

我同意PThomasCS。

首先,我尝试使用Microsoft建议/FS (Force Synchronous PDB Writes)

在Visual Studio开发环境中设置此编译器选项

  1. 打开项目的“属性页”对话框。有关详细信息,请参阅使用项目属性。
  2. 选择C / C ++文件夹。
  3. 选择“命令行”属性页。
  4. 修改Additional Options属性以包含/ FS,然后选择OK。

但它不起作用。

我注意到dropbox锁定了文件。我停止了同步。之后错误消失了。因此,尝试关闭/停止任何可能锁定文件的程序。

希望这可以帮助。


0
投票

我在几个项目中遇到了这个问题。在那些项目中,我在<ProgramDataBaseFileName>部分设置了<ClCompile>。删除<ProgramDataBaseFileName>部分及其标记(以便Visual Studio使用默认值)使得它消失了。


-1
投票

删除整个调试目录。


8
投票

在每个项目的C / C ++ - >常规设置页面中,将Multi_processor编译选项设置为No帮助我。


6
投票

我在VS2013上发现了编译libkml的相同问题(该错误特别出现在libkml解决方案中的libkmlxsd项目中)。

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
投票

我遇到了类似的问题:c ++ repos对于我团队中的其他人来说很好,但是我不能正确构建(给出问题中提到的.PDB / FS错误),有时还会链接错误。有人指出我正在将其中一个存储库克隆到Dropbox中的某个位置。在尝试了许多其他想法之后,我终于在非dropbox位置创建了一个新的克隆,并且解决方案编译时没有错误。我怀疑这个问题可能与其他文件同步服务相同。 (盒子,谷歌驱动器等),虽然我没有测试过那些。


3
投票

如果你使用CUDA,那么设置

项目 - >属性 - > CUDA C / C ++ - >主机 - >附加编译器选项 - > / FS


2
投票

如果解决方案中有多个项目,则需要为每个项目添加/ FS才能使其正常工作。只需选择项目 - >属性 - > C / C ++ - >命令行 - >其他选项。


2
投票

我也有这个问题,我通过从项目目录中删除.pdb文件并重新编译来解决它


2
投票

当错误消息提示时,当多个进程同时尝试访问项目的PDB文件时会发生此错误,如果启用并行编译会发生这种情况(我遇到了第三方构建调度程序的问题,我不确定当构建由Visual Studio自己的调度程序管理时是否也会发生这种情况。

使用/ FS编译器选项的指令指向正确的方向,诀窍是确保编译选项始终在编译中使用。

如果您使用CMake生成解决方案文件,则应在CMAKE_C_FLAGS和/或CMAKE_CXX_FLAGS中指定/ FS标志(要查看它们,您可能需要勾选CMake GUI中的“高级”复选框)并重新生成解决方案。

如果你正在使用CUDA,就像Fillippo中提到的his answer那样,你需要确保主机编译器也设置了标志。对于Visual Studio生成的解决方案,请在项目属性页面的CUDA C / C ++ - >主机 - >附加编译器选项中设置标志。但是,对于CMake生成的解决方案文件,您将没有任何CUDA C ++属性页面,因此您需要编辑CMake配置。如上所述,只需将/ FS标志添加到CMAKE_{C,CXX}_FLAGS,并检查CUDA_PROPAGATE_HOST_FLAGS是否设置为ON(which is its default value)。

© www.soinside.com 2019 - 2024. All rights reserved.