创建预编译头 Debug 正常 Release Link Error

Main.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Make3Dm.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
Make3Dm.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\MakeBlkIdx.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
MakeBlkIdx.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\MakeDtm.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
MakeDtm.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\MakeMapData.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
MakeMapData.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\OgrBlkIdx.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
OgrBlkIdx.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\SysBase.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
SysBase.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\FileNameMgr.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
FileNameMgr.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
warning C4727: 具有相同时间戳的名为 d:\nuroproj\winapp\proj\vs2008\makemapdata\makemapdata\release\makemapdata.pch 的 PCH 已存在于 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\LibFileNameMgr.obj 和 d:\NuroProj\WinApp\proj\vs2008\MakeMapData\MakeMapData\Release\Main.obj 中。使用第一个 PCH。
LibFileNameMgr.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqUehCAAIUnzpvnzkwzgzUnzpvnzkwzgzUivovzhvUyzhrxwzgzOlyq@ 已经在 BasicData.obj 中定义
..\..\..\..\bin\MakeMapData\MakeMapData.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

原因:多个cpp文件重复创建预编译头。

设置预编译头有两种:

一、设置工程的预编译头。工程属性里面设置的是使用哪个预编译头。

二、设置cpp文件的预编译头。预编译头的生成是在cpp文件的属性里面设置的,右键点击文件-属性-C/C++-预编译头,保证只有一个cpp文件会生成预编译头。

如果丢了或删了.PCH文件而以后要再修改工程文件时,可将指定的/Yc的.CPP文件(默认为StdAfx.cpp)重新编译一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All

转自http://blog.csdn.net/zhangting1987/archive/2008/07/15/2654131.aspx

为什么需要预编译头文件?

一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro宏,Preprocessor预处理),而VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间.但它们又不常被修改,是较稳定的,为单独的一个小文件而重新编译整个工程的所有文件导致编译效率下降,因此引入了.PCH文件.

如何使用预编译头文件以提高编译速度?

要使用预编译头文件,必须指定一个头文件(.H),它包含我们不会经常修改的代码和其他的头文件,然后用这个头文件(.H)来生成一个预编译头文件(.PCH)VC默认的头文件就是StdAfx.h,因为头文件是不能编译的,所以我们还需要一个.CPP文件来作桥梁,VC默认的文件为StdAfx.cpp,这个文件里只有一句代码就是:#include "StdAfx.h".接下来要用它生成.PCH文件,涉及到几个重要的预编译指令:/Yu,/Yc,/Yx,/Fp.简单地说,/Yc是用来生成.PCH文件的编译开关.在Project->setting->C/C++的Category里的Precompiled Header,然后在左边的树形视图中选择用来编译生成.PCH文件的.CPP文件(默认即StdAfx.cpp)你就可以看到/Yc这个开关,它表示这个文件编译了以后是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路径(可能/Fp的p代表path)./Yu的u即use使用,工程中只要包括了.H文件的文件都会有这个/Yu指令.如果选择自动Automatic...的话则原来为/Yc的地方就换成了/Yx指令.如果选择自动,则每次编译时编译器会看以前有没有生成过.PCH文件,有则不现生成否则就再次编译产生.PCH文件.

注意:
A,实际上,由Appzard项目向导生成的默认的头文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很简单.但如果你要这样做就要记得修改相应的Project->setting...下的几个预编译指(/Yc,/Yu,/Yx,/Fp)的参数.

B.在任何一个包括了将要预编译的头文件而使用了.PCH文件的工程文件的开头,一定必须要是在最开头,你要包含那个指定生成.PCH文件的.H文件(通过.CPP文件包括,默认为StdAfx.cpp),如果没包括将产生我最开头产生的错误.如果不是在最开头包括将产生让你意想不到的莫名其妙错误,如若不信,盍为试之?

C.预编译文件.PCH生成之很耗时间,而且生成之后它也很占磁盘空间,常在5-6M,注意项目完成之后及时清理无用的.PCH文件以节约磁盘空间.

D.如果丢了或删了.PCH文件而以后要再修改工程文件时,可将指定的/Yc的.CPP文件(默认为StdAfx.cpp)重新编译一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All

照这么说,我这种情况只要重新将“StdAfx.cpp”编译一下就可以了,一试,马上能编译运行了。心里不知道有多高兴,因为以前碰到过几次这样的问题都不知道怎么解决,只好重新创建一个相同的工程。
    以前还碰到过另外一种情况(早就解决了的):新建一个工程,随便找一个cpp文件,按ctrl+f7系统将会提示:fatal error C1083: 无法打开预编译的头文件:”Debug/xxx.pch”: No such file or directory(其中xxx是工程的名字)这种情况也是一样的原因,为vc的stdafx.h头文件未编译所致。也可以这样解决:先F7,编译后再ctrf+f7。
    看来什么东西都要从原理入手,才能更容易地解决。

转载于:https://www.cnblogs.com/lisuyun/p/6409958.html

创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH相关推荐

  1. android jni release,Android NDK 设置编译模式debug和release

    原文:http://stackoverflow.com/questions/14564918/android-ndk-release-build Unless you have created the ...

  2. [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题

    问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码方式来判断一个dll或者exe为debug build还是release build?由于没有太多的讨论,所以我只好自己找点儿办法,试图 ...

  3. Link Error : L1907: Fixup overflow in _FSTRUNC, to F_TOLONGK type 3, at offs

    CodeWorrior编译出现如下错误: Link Error : L1907: Fixup overflow in _FSTRUNC, to F_TOLONGK type 3, at offs 现象 ...

  4. Debug 和 Release 编译方式

    Debug 和 Release 编译方式的区别本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2. 哪些情况下 Release 版会出错 3. 怎样"调试& ...

  5. java编译release版本断言_关于Debug和Release之本质区别

    经常在 CSDN 上看见有人问 Debug 运行正常但 Release 失败的问题.以往的讨论往往是 经验性的,并没有指出会这样的真正原因是什么,要想找出真正的原因通常要凭运气.最 近我看了一些这方面 ...

  6. 关于Debug和Release编译方式

    问:怎么在VC6中把工程编译成release版本? 答:可以project->Set Active Config,选中release版本.此后,按F5或F7编译所得的结果就是release版本. ...

  7. 关于VS中区分debug与release,32位与64位编译的宏定义

    在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goo ...

  8. linux release 版本的区别,编译debug版本和编译release版本的区别

    大项目的版本编译会区别debug和release,那debug和release会有什么区别呢? 通过对比这两者的编译选项可以找到答案. 1.对比编译过程 debug: -DOS_LINUX  -DDE ...

  9. windows10下QT6.4.3编译qsqlmysql Debug+Release动态库

    QT6版本以上没有mysql的动态库,需要自己编译,网上找了好多教程都没有成功编译,后面结合多个教程慢慢倒腾 终于成功了,具体操作步骤如下: 1,首先下载安装QT的时候 需要安装它的源码 2,安装完成 ...

最新文章

  1. android开发过程中项目中遇到的坑----布点问题
  2. 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能
  3. if you can not make a solid foundation
  4. c 添加mysql表单的一行数据类型_MySQL数据库基础
  5. 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)
  6. php 自动分配数据到个人,数据表格自动分配列宽的一种实现方法
  7. 大数据分析平台的功能板块
  8. (转)软件商在做券商的事,券商在做搬运工的事,第三方正变成第三者
  9. MikuMikuDance V7.39 汉化版
  10. 如何快速构建一个Flutter互动直播应用
  11. c语言多字符和宽字符,2.1.5 多字节字符和宽字符
  12. 月活8.89亿背后:微信工程师细数兼容测试经验
  13. 北理工计算机学院奖学金公示,计算机学院2020年研究生国家奖学金拟推荐人选公示通知...
  14. 用css解决文本折行问题
  15. 目标检测中region proposal的作用?
  16. Mysql中时间格式转换
  17. 录屏怎么录声音?注意一点轻松录制外部音源
  18. SQL Server 扩展秘钥管理(EKM)
  19. 基于arduino和openmv的智能小车设计制作流程
  20. wingdings字体符号在哪_Wingdings特殊字符及符号对照表

热门文章

  1. 推荐一些C#相关的网站、资源和书籍
  2. python如何安装第三方库
  3. MySQL筛选重复数据
  4. Android开发学习之路-PopupWindow和仿QQ左滑删除
  5. 基于QQ服务器JavaMail邮箱SSL密码第三方发送邮件
  6. BGP双线的真真假假
  7. python安装 pip_多版本Python安装pip及pip版本管理终极教程
  8. spark基础之Spark SQL和Hive的集成以及ThriftServer配置
  9. (71)FPGA模块调用(system Verilog调用VHDL)
  10. (01)System Verilog验证理论