使用VS2008在一个解决方案中包含多个项目时,当设置多个项目的中间目录为同一个目录时,在增量编译时出现“重新编译时vc90.pdb不是创建此预编译头时使用的pdb文件,请重新创建预编译头问题”,从而导致整个解决方案每次都必须重新全部生成。

在msdn上获得如下信息:

You may receive a "PRJ0008" or "C2471" or "C1083" or "D8022" or "LNK1103" or similar error message when you try to build a solution in Visual C++

Symptoms:

  • D8022 : Cannot open 'RSP00000215921192.rsp'
  • PRJ0008 : Could not delete file 'vc90.idb'.
  • C1083 : Cannot open program database file 'vc90.pdb'
  • C2471 : Cannot update program database 'vc90.pdb'
  • LNK1103 : debugging information corrupt.

Cause:

This problem occurs when all of the following conditions are true:

  1. You have a solution with more than one project in it.
  2. Two or more of the projects are not dependent on each other.
  3. You have parallel builds enabled. (Tools -> Options: Projects and Solutions, Build and Run: "maximum number of parallel project builds" is set to a value greater than 1)
  4. You are building on a system with multiple CPUs (cores).
  5. Two or more of the non-dependent projects are configured to use the same Intermediate and/or Output directory.
  6. A specific race condition in mspdbsrv.exe remains uncorrected.

Resolution:

To resolve the problem do one or more of the following:

  • Reconfigure the non-dependent projects to specify an Intermediate and Output directory that is different from one another, e.g. Output Directory = "$(SolutionDir)$(ProjectName)\$(ConfigurationName)", Intermediate Directory = "$(OutDir)".
  • Adjust your solution's project dependencies (Project -> Project Dependencies...) so that each is dependent on another.
  • Disable parallel builds.
  • Add the "/onecpu" boot option to your boot.ini file.
  • Change you BIOS settings to enable/use only one CPU.
  • File a problem report with Microsoft Technical Support and keep bugging the ____ out of them until they eventually fix mspdbsrv.

Status:

The problem is a combination of both a user project configuration error as well as a race condition in Microsoft's "mspdbsrv.exe" utility that does not properly handle more than one thread calling it at the same time for the same file resulting in the file's HANDLE being left open.

Additionally Visual Studio itself and/or its build system (VCBUILD and/or MSBUILD) (or all three!) should be made smart enough to detect and alert the user of such user errors so that corrective action can be taken.

This problem has been around for a LOOOOOONG time.

Applies to:

  • Microsoft Visual C++ 2005
  • Microsoft Visual C++ 2008
  • Others?

Respectfully submitted:

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

p.s:

You're welcome. :)


Fish (David B. Trout)

最后,通过重新配置项目的中间输出目录成功解决上述问题。

遗留问题:在每个项目生成时,在对应的中间目录下都会生成vc90.pdb以及vc90.idb文件,如果全部项目的中间目录配置成相同目录,在项目依次生成过程中,后面生成的pdb文件会覆盖前面生成的pdb文件,从而导致修改部分源代码时,pdb文件可能不再是其对应项目生成的文件,因此需要重新生成整个解决方案。纯属猜测,后续可以使用逐步生成项目的方式验证结论。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/25731965-bf98-4bb7-97b7-6d1a0b21b733/cant-open-vc90pdb-in-visual-c-2008-rebuild?forum=vcgeneral

2016-07-07: 重新编译时vc90.pdb不是创建此预编译头时使用的pdb文件的更多相关文章

  1. vs2008 vc90.pdb 不是创建此预编译头时使用的 pdb 文件,请重新创建预编译头

    解决方案: 找到项目中的stdafx.cpp,右键属性,找到C/C++->预编译头, 设置为创建预编译头, 重新生成

  2. Xcode6之后创建Pch预编译文件

    在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件 ...

  3. codeblocks + MinGW 以及vc 使用预编译头文件的方法

    MinGW编译器: 1.打开工程文件,在工程文件浏览其中,在你要设置为预编译的头文件上,点击鼠标右键,选择“属性(properties)”  你会看到一个多页面的属性框,选择“构建(build)”页面 ...

  4. fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? 解决方法

    错误描述: fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 错误分析:     此错误发 ...

  5. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?

    在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译 ...

  6. fatal error C1010: 在查找预编译头时遇到意外的文件结尾

    错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "stdafx.h"”? 错误分析:     此错误发生 ...

  7. fatal error C1010: 在查找预编译头时遇到意外的文件结尾 (转)

    错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "stdafx.h"”? 错误分析:     此错误发生 ...

  8. 预编译加速编译(precompiled_header),指定临时文件生成目录,使项目文件夹更干净(MOC_DIR,RCC_DIR, UI_DIR, OBJECTS_DIR),#pragma execution_character_set("UTF-8")"这个命令是在编译时产生作用的,而不是运行时

    预编译加速编译 QT也可以像VS那样使用预编译头文件来加速编译器的编译速度.首先在.pro文件中加入: CONFIG += precompiled_header 然后定义需要预编译的头文件: PREC ...

  9. 错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?(转)

    错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx. ...

随机推荐

  1. iOS开发:XCTest单元测试(附上一个单例的测试代码)

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

  2. C# winform程序如何打包64位安装程序

    故事背景: 原来在客户电脑上工作的很正常的程序,在客户将其操作系统从32位换为64位之后,出现了不能正常使用的问题. --------------------------- 解决办法: 1:将解决方案 ...

  3. xpcall 安全调用

    -- xpall (调用函数f, 错误函数fe[, 参数]) function fun(a,b)   -- 这里的参数没什么实际作用,就是展示下用法    return a / bend -- xpc ...

  4. 有一个无效 SelectedValue,因为它不在项目列表中。

    在项目中出现绑定下拉框报错的问题 1:可能是先赋值,再绑定数据的问题 检查代码,是否有在数据绑定钱进行了赋值.

  5. D3 的优势

    可视化的库有很多,基于 JavaScript 开发的库也有很多,D3 有什么优势呢? (1)数据能够与 DOM 绑定在一起 D3 能够将数据与 DOM 绑定在一起,使得数据与图形成为一个整体,即图形中 ...

  6. import tf

    不知道为什么,tensorflow要最后import,否则会对matplotlib的imread产生影响,产生IO错误,异常莫名其妙

  7. 关于char类型的连续输入

    这个忘了好久了 先回想吧 一 单字符 ①  char m; scanf("%d",&m); ② char m; m=getchar(); putchar(m); 二 字符数 ...

  8. uva674 Coin Change ——完全背包

    link:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. 电脑结构和CPU、内存、硬盘三者之间的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  10. Postgres 9.4 feature highlight: REPLICA IDENTITY and logical replication

    Among the many things to say about logical replication features added in PostgreSQL 9.4, REPLICA IDE ...