【问题标题】:Visual Studio 2013 fatal error C1041 /FSVisual Studio 2013 致命错误 C1041 /FS
【发布时间】:2014-01-05 18:13:15
【问题描述】:

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

有没有其他人遇到过这个问题并找到了解决办法?

【问题讨论】:

  • 打字给了我一个想法。我禁用了 Carbonite(一种在线备份服务)以防它受到干扰,然后重新启动并编译了我的项目。如果您遇到此问题并发现此问题,您可能希望禁用任何可能会锁定您计算机上的文件的功能。
  • 你试过错误信息推荐的/FS了吗?
  • @cup 是的,/FS 标志没有修复它。
  • 删除 *.pdb 文件并重建。
  • 这曾经发生在 VS10 上,尤其是在缓存内容的多核机器上。尝试在 cmd 提示符下将 %NUMBER_OF_PROCESSORS% 设置为 1 并从那里启动 VS。然后构建。

标签: c++ compiler-errors visual-studio-2013


【解决方案1】:

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

变化

$(Platform)\$(Configuration)\

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

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

在每个项目中都解决了。

【讨论】:

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

我同意 PThomasCS

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

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

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

但是没有用。

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

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    在每个项目的 C/C++->General 设置页面中,将 Multi_processor compilation 选项设置为 No 对我有帮助。 p>

    【讨论】:

    • 是的,但这会影响编译时间:)
    【解决方案4】:

    如果你使用 CUDA,那么设置

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

    【讨论】:

      【解决方案5】:

      我在 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) 标志对我有用。但我必须在解决方案中设置所有项目,然后重新构建所有项目,以使其正常工作。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

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

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

            【讨论】:

              【解决方案9】:

              我在使用 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}")
              

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

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

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

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

                  【讨论】:

                    【解决方案12】:

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

                    【讨论】:

                    【解决方案13】:

                    我也遇到了同样的问题,解决方法很简单:磁盘满了……

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

                    【讨论】:

                      【解决方案14】:

                      同样的问题

                      • /FS 不起作用
                      • 删除 VS2013 文件无效
                      • 重新启动计算机无效
                      • 从项目中删除头文件和源文件并重新添加它们,不起作用
                      • 无法关闭 Google Drive 和 Dropbox

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

                      【讨论】:

                        【解决方案15】:

                        为我解决的方法是手动终止 mspdbsrv 进程。那里的某些东西有时不能很好地处理并发构建,并陷入错误状态。 下一次构建重新启动了 pdb 服务器,一切恢复正常。

                        【讨论】:

                          【解决方案16】:

                          删除整个调试目录。

                          【讨论】:

                            【解决方案17】:

                            可能出现此错误的原因之一是 pdb 文件被标记为只读属性。如果是,请从文件中删除只读属性。

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

                            【讨论】:

                              【解决方案18】:

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

                              【讨论】:

                                【解决方案19】:

                                我遇到了类似的问题。我什至无法删除我项目的 pdb 文件。 Windows 告诉我应用程序serviceHub.Host.CLR.x64 访问了这些文件。尽管 Visual Studio 已重新启动,但该进程仍由 Visual Studio 使用。
                                杀死这个进程有帮助!

                                【讨论】:

                                  【解决方案20】:

                                  我遇到了同样的问题。

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

                                  【讨论】:

                                    【解决方案21】:

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

                                    我通过清理并构建出现错误的项目来修复它

                                    【讨论】:

                                      【解决方案22】:

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

                                      【讨论】:

                                      • 如果使用 qmake,请将其添加到您的 .pro 文件中:QMAKE_CFLAGS+=/FS
                                      【解决方案23】:

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

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 2013-12-15
                                        • 2015-09-11
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2014-06-18
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多