Visual Studio 2013致命错误C1041/FS

PTh*_*sCS 39 c++ compiler-errors visual-studio-2013

我正在使用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
Run Code Online (Sandbox Code Playgroud)

我试过按照这些说明无济于事:http://msdn.microsoft.com/en-us/library/dn502518.aspx

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

小智 51

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

更改

$(Platform)\$(Configuration)\
Run Code Online (Sandbox Code Playgroud)

$(Platform)\$(Configuration)\$(ProjectName)\
Run Code Online (Sandbox Code Playgroud)

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

在每个项目中解决了它.

  • 根据 M$ 文档本身:“这可能会使构建时间显着延长,并且不能防止 cl.exe 的多个实例同时访问 PDB 文件时可能发生的所有错误。我们建议您更改解决方案以便独立的项目写入单独的中间和输出位置”所以我相信这是正确的答案 - 不要为多个项目重复使用相同的 pdb - 它不会可靠地工作。 (2认同)

Mak*_*aks 9

我同意PThomasCS.

首先,我尝试使用Microsoft建议/ FS(强制同步PDB写入):

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

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

但它不起作用.

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

希望这可以帮助.


Dar*_*ans 8

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

  • 是的,但这会影响编译时间:) (2认同)

小智 8

如果您使用 CUDA,则设置

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


Gab*_*bel 7

我在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
Run Code Online (Sandbox Code Playgroud)

/ FS(强制同步PDB写入)标志为我工作.但我必须在解决方案中设置所有项目,并重建所有项目,以使其有效.


小智 5

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


mch*_*son 5

我用cmake生成的vs2017也有同样的问题。我尝试添加/FS两者CMAKE_C_FLAGSCMAKE_CXX_FLAGS但没有帮助。我不想牺牲多处理器编译,因为我有一个相当大的项目,并且我希望使用我的 PC 上的所有可用内核尽快构建我的项目。

因此,我选择切换 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}")
Run Code Online (Sandbox Code Playgroud)

请注意,使用/Z7会使您的二进制文件明显变大。