当前位置: 首页 > news >正文

网站开发 合作协议/网站策划

网站开发 合作协议,网站策划,杭州网站建设开发外包公司,下载家乐福超市app转载自:http://hi.baidu.com/andywangcn/blog/item/7d8da5072516fc7003088172.html 注:我是使用修改预编译头的方式解决了C1083的错误,找不到stdafx.h头文件。 VS2013设置预编译头在:属性->C/C->预编译头。 这几天写程序&a…

转载自:http://hi.baidu.com/andywangcn/blog/item/7d8da5072516fc7003088172.html

注:我是使用修改预编译头的方式解决了C1083的错误,找不到stdafx.h头文件。

 

VS2013设置预编译头在:属性->C/C++->预编译头。

 这几天写程序,无意间把编译中间文件给删了,然后就出现了C1083编译错误。
xxx.cpp

..\commen\xxx.cpp(2) : fatal error C1083: 无法打开预编译头文件:“Release\xxx.pch”: No such file or directory

        在网上搜索了很久,大致是这么解决的,将【创建/使用编译头】改为“不使用编译头”,或者改成 “创建预编译头(/Yc)”, 然后编译就通过了。

         

         于是我也招搬了 “不使用编译头” ,结果出现下面的错误:

xxx.cpp
..\commen\xxx.cpp(2) : fatal error C1083: 无法打开包括文件:“stdafx.h”: No such file or directory

         原因是我的程序文件放了好几个目录,公共目录下自然没有“stdafx.h”,所以就编译错误了。然后我又改为“创建预编译头”,在Debug版本下,貌似对了。Release时,忘了怎么配置的,结果仍然提示  “无法打开预编译头文件 xx.pch”。

        按照网上的说法,我把stdafx.cpp单独编译了一下(在解决方案视图,右键文件->编译,则只对选中文件进行编译),然后再整体编译连接,编译通过了,但是链接又出问题了,提示如下:

warning C4727: 具有相同时间戳的名为 xxx.pch 的 PCH 已存在于yyy.obj 和 yyy.obj 中。使用第一个 PCH。
MyDlg2.obj : error LNK2005: ___@@_PchSym_@00@UdliphkzxvUexUszmarUKltKoyKrqKluKpmKqsKltKroKonKluKqoKoleBUivovzhvUnbwotOlyq@ 已经在 MyDlg.obj 中定义

         我晕!然后又改成 “使用预编译头(/Yu)”,当编译正要成功是,悲剧又来了:

.\MyDlg.cpp(4) : fatal error C1854: 无法覆盖在创建对象文件“xxx\release\mydlg.obj”的预编译头过程中形成的信息

        然后我就反复,将【创建/使用编译头】,在这几个选项中切换尝试,但错误始终存在。正在我无奈之极,突然搜到了MSDN中对错误C4727和C1854的解释:


http://msdn.microsoft.com/zh-cn/library/5a193hd8.aspx

错误 C1854
Visual Studio 2010
其他版本
无法覆盖在创建对象文件“filename”的预编译头过程中形成的信息

您对同一文件指定 /Yc(创建预编译头文件)选项后指定了 /Yu(使用预编译头文件)选项。 某些声明(如包括__declspecdllexport 的声明)使此操作无效。


http://msdn.microsoft.com/zh-cn/library/ms235540.aspx

编译器警告(等级 1)C4727
Visual Studio 2010
其他版本
在 obj_file_1 和 obj_file_2 中找到具有相同时间戳的名为 pch_file 的 PCH。使用第一个 PCH。

如果用 /Yc 编译多个 compiland,并且其中的编译器能够用相同的 .pch 时间戳标记所有的 .obj 文件,将发生 C4727。

要消除此警告,请用 /Yc /c 编译一个源文件(创建 pch),并用 /Yu /c 分别编译其他的源文件(使用 pch),然后再将它们链接到一起。

因此,如果使用了下面的选项就会生成 C4727:

cl /clr /GL a.cpp b.cpp c.cpp /Ycstdafx.h

您可改用下面的选项:

cl /clr /GL a.cpp /Ycstdafx.h /c

cl /clr /GL b.cpp c.cpp /Yustdafx.h /link a.obj

有关更多信息,请参见

    /Yc(创建预编译的头文件)

    /Yu(使用预编译的头文件)

        

        MSDN对C4727是这样解决的:

您可改用下面的选项:

cl /clr /GL a.cpp /Ycstdafx.h /c

cl /clr /GL b.cpp c.cpp /Yustdafx.h /link a.obj

        原本以为要手动使用命令含编译所有文件,我想还是算了,因为我的工程有30多个文件,除非写成bat,否则编译还会累死。幸好我不会bat,没有动手去写。我猜想VS功能这么强大,既然报错了,错误应该有解决办法的,不可能让我们手动去编译。在查看工程属性的时候,无意间,点到了stdafx.cpp,豁然开朗!

 

 

然后按照MSDN的那个解觉办法的原理,进行设置,就OK了。对工具和问题原理不熟,害我走这么多的弯路啊。


总结下,大致四种解决的办法:

1. 如果无意间,删掉xxx.pch文件,如果编译器报错 “C1083无法打开xxx.pch”,一般只需要清理解决方案,然后rebuild all就可以了。

2.如果1不管用,将【创建/使用预编译头】改为 “不使用编译头”,然后清理解决方案,rebuild即可。

3.如果仍然不管用,将【创建/使用预编译头】改为 “创建预编译头”,然后清理解决方案,rebuild即可。

4.如果上述方法,还不管用。将【创建/使用预编译头】改回 “使用预编译头”,然后将“stdafx.cpp”的属性中【创建/使用预编译头】,改成 "创建预编译头",将其他所有的.cpp文件的预编译属性均该为 “使用预编译头” ,清理解决方案,然后rebuild即可。

注意:每次更改属性后,都要清理解决方案,如果工程目录下的.pch文件仍然存在,要手动删掉。

尽量不要使用2、3的方法,应直接使用4的方法,虽然麻烦点,但是值得的,免得后面哪里删错了有出现这鬼错误。


预编译头是很有用的,不要因为错误而认为他碍眼,也不要因为VC每个源文件前面都要包含stdafx.h而觉得麻烦。下面是别人对这个错误以及对编译头的分析,

 

http://www.jmfq.cn/news/5220487.html

相关文章:

  • 网站栏目建设调研/百度怎么做广告推广
  • 电脑端网站和手机网站区别/今日新闻头条新闻
  • 建设部住房城乡建设厅网站/关键词分布中对seo有危害的
  • 湖南做网站磐石网络案例/企业培训考试
  • 网页搜索功能怎么实现/网站推广seo招聘
  • 网站设计技术有哪些/深圳网络营销平台
  • 医社保增减员在什么网站做/免费b站推广
  • 做设计必知网站/小程序开发平台官网
  • html后台网站模板/产品关键词
  • 用表格做网站教程/app开发者需要更新此app
  • 网站建设责任分工/网址导航怎样推广
  • 朋友圈网站广告怎么做/网络推广的方法有多选题
  • 绛县做网站/搜索引擎优化规则
  • 百度贴吧有没有做网站的人/昆明seo排名外包
  • 小企业如何优化网站建设/天津seo培训机构
  • 网站建设公司位置/网页制作软件
  • php网站欣赏/seo网站优化价格
  • 宁夏网站建设优化/seo培训优化
  • 企业网站制作规划/关键词优化排名详细步骤
  • 云虚拟主机做视频网站/seo快速排名系统
  • 哪个网站做二手车买卖/最新小组排名
  • dw做网站怎么写弹出客服邮箱/企业网搭建
  • 电视盒子做网站服务器/中国最新军事新闻最新消息
  • 龙口做网站es158/赣州网站建设
  • ps切图做网站/网站增加外链的方法有哪些
  • qq音乐如何做mp3下载网站/长春模板建站代理
  • 项目总结报告怎么写/南京seo按天计费
  • 建国外网站需要多少钱/2022好用值得推荐的搜索引擎
  • 一流的网站建设推广/网络销售推广平台
  • 网站登录系统怎样做/西地那非片的功效与作用