VC2008编译错误打开sbr文件(C2418 C1903 C2471)

Tim*_*Tim 15 c++ visual-studio-2008

编辑:请参阅下面的修补程序的答案.

原始问题:

在设置我们的船编程冒险时,我必须设置源代码控制并修复项目文件以供团队使用.(该项目之前只有一个人在设置项目时采取了快捷方式,包括等)

我正在修复那些SLN和Proj文件.当试图在外部USB驱动器上进行构建时(我没有在主硬盘驱动器上尝试过)我遇到了奇怪的错误(很多错误都是针对各种文件):

致命错误C1083:无法打开编译器生成的文件:'.\ Debug\.sbr':权限被拒绝

这些文件在vcproj文件中引用,其中相对路径用双引号表示:

RelativePath = "..\.. \来源\的.cpp"

我在IDE中的sln文件中获得相同的错误形式,或者如果我使用sln文件调用msbuild.

这些文件对于一些sln文件(项目)来说是"共享的".

最初创建SLN文件的人不是一个配置MSDev或让团队工作的向导.

这是引用源文件的方式的问题吗?有关如何解决这些问题的任何建议?

此网址似乎没有有用的信息:

MSDN上的致命错误C1083

注意 - proj文件中仍有/仍然是硬编码路径,但我不看这些文件.他们主要是包括和lib dirs.我想我全部删除了它们.

我也得到这些错误:

..\..\Source\.cpp:错误C2471:无法更新程序数据库'\ debug\vc90.pdb'

..\..\Source\.cpp(336):致命错误C1903:无法从之前的错误中恢复; 停止编译

..\..\Source\.cpp(336):错误C2418:无法删除浏览器文件:.\ Debug\.sbr

小智 25

标题:当您尝试在Visual C++中构建解决方案时,您可能会收到"PRJ0008"或"C2471"或"C1083"或"D8022"或"LNK1103"或类似的错误消息

症状:

  • D8022:无法打开'RSP00000215921192.rsp'
  • PRJ0008:无法删除文件'vc90.idb'.
  • C1083:无法打开程序数据库文件'vc90.pdb'
  • C2471:无法更新程序数据库'vc90.pdb'
  • LNK1103:调试信息损坏.

原因:

满足所有以下条件时发生此问题:

  1. 您有一个包含多个项目的解决方案.
  2. 两个或多个项目不相互依赖.
  3. 您已启用并行构建.(工具 - >选项:项目和解决方案,构建和运行:"最大并行项目构建数"设置为大于1的值)
  4. 您正在构建具有多个CPU(核心)的系统.
  5. 两个或多个非依赖项目配置为使用相同的中间和/或输出目录.
  6. mspdbsrv.exe中的特定竞争条件仍未修正.

解析度:

要解决此问题,请执行以下一项或多项操作:

  • 重新配置非依赖项目以指定彼此不同的Intermediate和Output目录,例如Output Directory ="$(SolutionDir)$(ProjectName)\ $(ConfigurationName)",Intermediate Directory ="$(OutDir)".
  • 调整解决方案的项目依赖项(项目 - >项目依赖项...),以便每个依赖于另一个.
  • 禁用并行构建.
  • 将"/ onecpu"引导选项添加到boot.ini文件中.
  • 更改BIOS设置以启用/仅使用一个CPU.
  • 向Microsoft技术支持部门提交问题报告,并在他们最终修复mspdbsrv之前不断窃听它们.

状态:

问题是用户项目配置错误以及Microsoft的"mspdbsrv.exe"实用程序中的竞争条件的组合,该实用程序无法正确处理多个线程同时为同一文件调用它导致文件的HANDLE被打开了.

此外,Visual Studio本身和/或其构建系统(VCBUILD和/或MSBUILD)(或全部三个!)应该足够智能,以检测并警告用户此类用户错误,以便采取纠正措施.

这个问题已经存在了LOOOOOONG时间.

适用于:

  • Microsoft Visual C++ 2005
  • Microsoft Visual C++ 2008
  • 其他?

恭敬地提交:

"鱼"(David B. Trout)
fish@infidels.org

PS:

别客气.:)

  • +1.很好的答案.当使用连续集成系统并行构建两个不相关的项目时,这个问题似乎也可能发挥作用...这就是我在这里的原因.:( (4认同)