注意:这里说的方案不适用于coco2d-x 3.0 STL 工程,把调试信息数据库设成非“C7兼容”的情绪。

http://www.tuicool.com/articles/uYZz2q6

完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错 - 细雨淅淅

时间2014-03-06 20:11:00  博客园-所有随笔区 原文  http://www.cnblogs.com/zsb517/p/3585243.html

我的开发环境是Win7旗舰64位+VS2003.Net,经常卡pdb错误,文末给出一个完美的解决方案和一个懒人补丁包。问题描述如下:在重新编译的时候,经常报错:

fatal error LNK1201: 写入程序数据库“.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够

原因是编译要生成.pdb文件,但是这个.pdb文件又被VS的进程独占,所以生成失败。这个现象由来已久,MSDN上有外国开发者指出这是VS的老毛病了,而且win7并不在vs2003的支持列表里,你找微软说理人家也不鸟你。网上有国人扯什么

当你编译某一项目时,该项目的pdb文件正被另一处于调试状态下的编译器所使用,编译无法向项目pdb文件写入数据,无奈之下,编译器只好向你报LNK1201错误请求你协助解决。

最后还扯什么检查自己的linker,重启VS什么的,全是瞎扯,有些程序员遇到问题总是习惯先从自己身上找毛病,我认为这是奴才德性。明明是微软自己不兼容的bug,干吗替人家背黑锅?

好了不扯远了,来看看解决方案吧,既然问题由pdb文件引起,那么就应该拿跟pdb有关的选项动刀。

第一个方案的中心思想是不生成pdb文件:

打开项目属性–>链接器–>调试,去掉调试信息,干掉PDB文件,以后不依赖PDB就好了。

但是这样你就等于阉割了VS的调试功能,果然是欲练此功必先自宫呀。

第二个方案的中心思想是在生成pdb文件之前,先释放别的进程对它的句柄。

32位版本解决方案:

使用外部工具释放pdb文件句柄,我是从这位网友处知道有人专门做了个freepdb(只适用于32位)工具的:

Windows 7 使用 VS.NET 2003 开发项目时经常会遇到类似如下错误:

TestServer fatal error LNK1201: 写入程序数据库“d:\Projects\GameServer\data\TestServer.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够

在排除了空间、路径、权限等原因后仍然无法顺利生成项目,微软官方也没有提供相关的解决方案,Google 了好几天也找不到网友任何修复建议,今天偶然发现 MSDN 上一篇帖子 , 正是讨论这个问题,于是尝试按照上面的步骤进行操作,竟然真的可以!特分享给大家~

一、首先下载两个文件: Handle   和 freepdb ;

二、解压这两个压缩包,并把“freepdb.cmd”和“handle.exe”两个文件移至同一目录下(如 C:\LNK1201\);

三、用 VS.NET 2003 打开一个项目,在解决方案资源管理器中项目文件上点右键属性,展开“生成事件”,点击“预生成事件”,在右侧命令行中填入:<path>\freepdb $(ProjectName)   ;

四、完成!运行一下看看吧。如果仍然有问题,先双击运行这两个文件试试,因为我是先运行后再配置项目属性的,所以不确定不运行会不会出错。

如果上述文件无法下载,请联系 xoyozo 索取!Have fun!

提示,Win7 64位没戏了,上面的Handle是32位的,没法在64位下面释放handle,可能跟CreateRemoteThread有关。

另外这位网友说得很对,我补充说一点,下载下来的两个文件最好放进安装目录\Microsoft Visual Studio .NET 2003\Vc7\bin里面(这个文件夹是link.exe的位置),以免找不到路径。但是每次新建工程之后都要手动修改工程属性也太烦了,我决定在其基础上,一并将VS的工程模板修改了。

改起来稍微有些麻烦,话说回来,做技术本来就很麻烦,不麻烦能体现出诸位的过人之处吗?

首先打开\Microsoft Visual Studio .NET 2003\Vc7\VCWizards\win32wiz\scripts\2052\default.js,这个文件控制着win32模板的生成与默认属性。

搜索proj.Object.Configurations,在这一行代码下添加我写的如下两行代码

1

2

var VCPreBuildEventTool = config.Tools("VCPreBuildEventTool" );

VCPreBuildEventTool.CommandLine = "freepdb $(ProjectName)" ;

你一共会找到两处,一处是var config = proj.Object.Configurations("Debug");,一处是config = proj.Object.Configurations.Item("Release");,分别对应工程模板的debug和release两个编译选项,按惯例修改之前先备份。改完之后保存,新建一个工程,先编译一下。然后去工程属性里看看,默认的预生成时间就有freepdb $(ProjectName)了:

顺便打开生成窗口,发现预生成事件freepdb.bat已经顺利运行了:

------ 已启动生成: 项目: testFREEPDB, 配置: Debug Win32 ------

正在执行预生成事件...

正在编译...

stdafx.cpp

正在编译...

testFREEPDB.cpp

正在链接...

生成日志保存在“file://testFREEPDB\Debug\BuildLog.htm”中

testFREEPDB - 0 错误,0 警告

---------------------- 完成 ---------------------

生成: 1 已成功, 0 已失败, 0 已跳过

如果你的是生成窗口显示的是找不到文件,那么说明你的freepdb放错了位置。

同理对MFC模板,也是一样的道理,打开\Microsoft Visual Studio .NET 2003\Vc7\VCWizards\mfcappwiz\scripts\2052\default.js进行一样的修改,接下来什么dll呀lib之类的模板也是一样的道理。

64位解决方案(其实也可以用于32位):

由于handle.exe不支持64位系统,hankcs决定采用大名鼎鼎的unlocker来代替它。方法和32位版本的方法差不多,不同的是,先去http://www.emptyloop.com/unlocker/ 下载一个绿色版的unlocker(同时支持32&64,也就是说,我这个所谓的“64位解决方案”其实也适用于32位的,前面的32位方案是被那个网友蒙住了,早知道有unlocker这种神器就不用那劳什子的handler了)。解压到\Microsoft Visual Studio .NET 2003\Vc7\bin里,然后将预编译命令行设为

Unlocker.exe "$(TargetDir)$(ProjectName).pdb" /S

就万事大吉了,如果你喜欢折腾,可以继续修改模板default.js,原理同上。

接下来随便怎么编译,故意让程序卡死,都不会出现 fatal error LNK1201错误了。

是不是很神奇?

我知道如果不把懒人补丁包放在最后面,你一定不会看完的。

补丁解压到你的安装目录下,选择全部替换

下载地址:http://hankcs.opendrive.com/files/OV8xMTE0MjEyMV9KTFlCMF8wN2My/Vc2003.net_LNK1201_补丁_码农场_www.hankcs.com.rar

解压密码:www.hankcs.com

转载请注明: 码农场 » 完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错

完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错 - 细雨淅淅相关推荐

  1. fatal error LNK1201

    OglPMesh fatal error LNK1201: 写入程序数据库"d:\OglPMesh\Debug\OglPMesh.pdb"时出错:请检查是否是磁盘空间不足.路径无效 ...

  2. 转贴 fatal error LNK1201:

    来自:http://blog.sina.com.cn/s/blog_492d45790100046x.html 转贴 fatal error LNK1201: OglPMesh fatal error ...

  3. 完美解决IIS 服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'。错误是 '没有注册类别

    完美解决IIS 服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'.错误是 '没有注册类别 现象:         浏览ASP页面提示   500内部错误 事件查看器中:         [ ...

  4. VS2017链接报错:fatal error LNK1318: 非意外的 PDB 错误

    今天编译的时候出现了 : fatal error LNK1318: 非意外的 PDB 错误: NOT_IMPLEMENTED (9)  找了很久,后来对比sample里面的配置选项,终于解决问题: 中 ...

  5. 问题 | 解决Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll 问题(pycharm+Tensorflow)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 之前安装的TensorFlow是1 ...

  6. 解决 LLVM 错误 fatal error: ‘csignal’ file not found

    错误信息: /Users/exchen/Downloads/Unity-iPhone/Classes/main.mm:3:10: fatal error: 'csignal' file not fou ...

  7. 解决Ubuntu16.04 fatal error: json/json.h: No such file or directory

    参考博客 错误产生 安装json-c库之后,根据GitHub上面的readme文件链接到json-c库时出现以下错误: SDMBNJson.h:9:23: fatal error: json/json ...

  8. 解决:[DCC Fatal Error] **.dpk : E2202 Required package '***' not found

    //[DCC Fatal Error] **.dpk : E2202 Required package '***' not found 意思是:[DCC致命错误] *:e2202需包***没有发现 D ...

  9. 【亲测可用】解决Ultra iso软碟通写入硬盘映像时 硬盘映像容量太小问题

    使用的Ultra ISO版本不对,参考如下博主的解决方法即可,向博主表示感谢! 解决Ultraiso软碟通写入硬盘映像时的总提示 硬盘映像容量太小 | 叮当解忧阁http://www.dingdang ...

最新文章

  1. AI芯片的未来之战:“霸主”英伟达真就无人能挡了吗?
  2. windows下使用cmd查看连接过的wifi密码
  3. 形状相似的物品_空运一般货物及危险品和特殊物品对包装的要求和规定!
  4. C语言 #pragma once - C语言零基础入门教程
  5. ubuntu 16.04下安装mysql
  6. php strncmp,PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
  7. C语言线性表之循环单链表
  8. AngularJS学习之旅—AngularJS 模块(十五)
  9. c语言实现克鲁斯卡尔算法,跪求C语言代码纠错,急~~~,克鲁斯卡尔算法
  10. 计算机软考做题app,计算机软考真题app
  11. Linux 忘记密码解决方法
  12. js中替换和全部替换
  13. android常用的混淆规则,关于Android混淆的基本做法
  14. 03 三维地图添加切片图层
  15. ★40个经典的社交心理学现象
  16. Web Strom 必备快捷键
  17. 通过加速或跳过网页视频解决进度条无法拖动问题
  18. Nand2Tetris Project1
  19. 现货K线图知识之五:北坡炮兵并排跑
  20. 为什么自学前端容易失败?数千名新手程序员得出结论

热门文章

  1. 一篇文章,教你学会Git
  2. 海豹突击队体能训练手册——前言
  3. 应用程序 iis 中的服务器错误,unhandled-exception
  4. Android,SharedPreferences的使用
  5. 关于Android短信拦截
  6. 获取手机存储卡路径的一种方法
  7. 大数据是人类福音还是洪水猛兽?
  8. android studio signingconfigs 打正式包,Android-SigningConfigs打包配置
  9. 焊接摆动与不摆动的区别
  10. Google Play App Signing 更换签名