2013-12-17 134 views
27

我正在使用Visual Studio 2013.每个项目都经常按项目拒绝编译。如果我撤销任何更改,它仍然不会编译。我发现重新创建整个项目是可行的。我想实际解决这个问题。那我得到的错误是:Visual Studio 2013致命错误C1041/FS

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

有没有其他人遇到过这一点,并找到了解决?

+2

键入这个给了我一个主意。我禁用了Carbonite(一种在线备份服务),以防它干扰并重新启动并编译我的项目。如果您遇到此问题并且发现此问题,则可能需要禁用可能会锁定计算机上的文件的任何内容。 – PThomasCS

+0

您是否尝试了错误消息推荐的/ FS? – cup

+0

@cup是的,/ FS标志没有解决它。 – PThomasCS

回答

5

,我发现了同样的问题,汇集关于VS2013 libkml(出现错误专门针对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

我同意PThomasCS

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

要在Visual Studio开发环境

  1. 打开项目的属性页对话框中设置此编译器选项。有关详细信息,请参阅使用项目属性。
  2. 选择C/C++文件夹。
  3. 选择命令行属性页面。
  4. 修改其他选项属性以包含/ FS,然后选择确定。

但它没有工作。

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

希望这会有所帮助。

0

我面临同样的问题。

删除完整$(IntDir)为我工作。这里

0

同样的问题也

  • /FS没有工作
  • 删除VS2013文件没有工作
  • 重新启动计算机没有工作
  • 从项目中删除页眉和源文件和重新添加它们,没有工作
  • 关闭谷歌驱动器和Dropbox没有工作

我不得不删除损坏的副本并使用我的备份副本 - 通常是每天,我把我的工作文件夹的拷贝到备份驱动器

8

C/C++ - >常规设置页面为每个项目,将多处理器编译选项设置为帮助了我。

+0

工作过她,谢谢。 –

+0

是的,但它会伤害编译时间:) –

39

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

更改

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

配置属性 - >通用>中间体目录

在每个项目

解决它。

+0

这个解决方案就像一个魅力!谢谢! – stoneyang

+0

使用'/ FS'为我工作,直到我的SLN变得更大;那么我需要这个。 –

+0

为我工作!谢谢一堆! – Scumble373

2

如果您在解决方案中有多个项目,则需要将/ FS添加到每个项目中才能使用。只需选择project-> properties-> C/C++ - > Commandline - > Additional Options。

1

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

1

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

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

0

/FS标记需要放置在链接器命令行中。做工精良

+0

FS =强制同步,什么,为什么,如何... https://msdn.microsoft.com/en-us/library/dn502518.aspx – zipzit

2

如果你使用CUDA,然后设置

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

0

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

0

我有同样的问题,中间目录为该项目为空。所以接受的修复程序对我来说不起作用。

我做一个干净的,并建立在这给了错误

5

我有一个类似的问题,该项目固定它:C++回购,将建立罚款为其他人在我的球队不会给我正确构建(给问题中提到的.PDB/FS错误),有时也会链接错误。有人指出,我正在克隆我的Dropbox中某个位置的其中一个回购站。在尝试了许多其他想法之后,我终于向非Dropbox位置创建了一个新的克隆,并且该解决方案无错地编译。我怀疑这个问题对其他文件同步服务可能是共同的。 (Box,谷歌驱动器等),虽然我还没有测试过这些。

1

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

使用/ FS编译器选项的说明指向正确的方向,诀窍在于确保编译选项始终用于编译。

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

如果您使用CUDA,如Fillippohis 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)。