我正在使用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
有没有其他人遇到这个并找到了修复?
我有这个问题,因为解决方案中的不同项目具有相同的中间目录。
更改
$(Platform)\$(Configuration)\
至
$(Platform)\$(Configuration)\$(ProjectName)\
在
配置属性|一般|中间目录
在每个项目中解决了它。
为我解决的是手动杀死mspdbsrv进程。偶尔有些东西不能很好地处理并发构建,并陷入错误的状态。下一个版本重新启动了pdb服务器,所有内容都恢复正常。
我正在运行备份服务。我的问题是,当编译器试图写出.pdb文件时,备份服务会继续从先前的编译中备份新的.pdb文件。通过从备份中排除.pdb文件,我解决了这个问题。
这种类型的问题很难追查,因为它是间歇性的。备份完成后,编译器创建新的.pdb文件时不再存在冲突,因此您可能会认为其他一些解决方案有效。
我有同样的问题,解决方案很简单:磁盘已满...
但在这种情况下错误消息并不是很有帮助...我通过使用进程监视器找到它。
我遇到了同样的问题。
删除完整的$(IntDir)对我有用。
同样的问题也在这里
我不得不删除损坏的副本并使用我的备份副本 - 通常每天,我将我的工作文件夹的副本放入备份驱动器
/ FS标记需要放在链接器命令行中。工作得很好
我遇到了同样的问题,该项目的Intermediate目录为空。所以接受的修复对我不起作用。
我通过干净修复它,并在产生错误的项目上构建
我在使用MSVC在Qt Creator中构建时遇到了这个问题。创建缺少的debug
文件夹并重建修复了该问题。
我试图在docker卷上构建。似乎cl.exe无法处理映射的目录。我将文件复制到非映射文件夹并成功编译。
可能发生此错误的原因之一是pdb文件标有只读属性。如果是,请从文件中删除只读属性。
要删除右键单击PDB文件 - >属性 - >取消选中属性:ReadOnly
我同意PThomasCS。
首先,我尝试使用Microsoft建议/FS (Force Synchronous PDB Writes):
在Visual Studio开发环境中设置此编译器选项
但它不起作用。
我注意到dropbox锁定了文件。我停止了同步。之后错误消失了。因此,尝试关闭/停止任何可能锁定文件的程序。
希望这可以帮助。
我在几个项目中遇到了这个问题。在那些项目中,我在<ProgramDataBaseFileName>
部分设置了<ClCompile>
。删除<ProgramDataBaseFileName>
部分及其标记(以便Visual Studio使用默认值)使得它消失了。
删除整个调试目录。
在每个项目的C / C ++ - >常规设置页面中,将Multi_processor编译选项设置为No帮助我。
我在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)旗为我工作。但我必须在解决方案中设置所有项目,并重建所有项目,以使其有效。
我遇到了类似的问题:c ++ repos对于我团队中的其他人来说很好,但是我不能正确构建(给出问题中提到的.PDB / FS错误),有时还会链接错误。有人指出我正在将其中一个存储库克隆到Dropbox中的某个位置。在尝试了许多其他想法之后,我终于在非dropbox位置创建了一个新的克隆,并且解决方案编译时没有错误。我怀疑这个问题可能与其他文件同步服务相同。 (盒子,谷歌驱动器等),虽然我没有测试过那些。
如果你使用CUDA,那么设置
项目 - >属性 - > CUDA C / C ++ - >主机 - >附加编译器选项 - > / FS
如果解决方案中有多个项目,则需要为每个项目添加/ FS才能使其正常工作。只需选择项目 - >属性 - > C / C ++ - >命令行 - >其他选项。
我也有这个问题,我通过从项目目录中删除.pdb文件并重新编译来解决它
当错误消息提示时,当多个进程同时尝试访问项目的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)。