小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

vs錯(cuò)誤【C1083 C1854 C4727】的若干解決辦法

 昵稱8245320 2011-12-19

        這幾天寫(xiě)程序,無(wú)意間把編譯中間文件給刪了,然后就出現(xiàn)了C1083編譯錯(cuò)誤。

xxx.cpp

..\commen\xxx.cpp(2) : fatal error C1083: 無(wú)法打開(kāi)預(yù)編譯頭文件:“Release\xxx.pch”: No such file or directory

        在網(wǎng)上搜索了很久,大致是這么解決的,將【創(chuàng)建/使用編譯頭】改為“不使用編譯頭”,或者改成 “創(chuàng)建預(yù)編譯頭(/Yc)”, 然后編譯就通過(guò)了。


         于是我也招搬了 “不使用編譯頭” ,結(jié)果出現(xiàn)下面的錯(cuò)誤:

xxx.cpp
..\commen\xxx.cpp(2) : fatal error C1083: 無(wú)法打開(kāi)包括文件:“stdafx.h”: No such file or directory

         原因是我的程序文件放了好幾個(gè)目錄,公共目錄下自然沒(méi)有“stdafx.h”,所以就編譯錯(cuò)誤了。然后我又改為“創(chuàng)建預(yù)編譯頭”,在Debug版本下,貌似對(duì)了。Release時(shí),忘了怎么配置的,結(jié)果仍然提示  “無(wú)法打開(kāi)預(yù)編譯頭文件 xx.pch”。

        按照網(wǎng)上的說(shuō)法,我把stdafx.cpp單獨(dú)編譯了一下(在解決方案視圖,右鍵文件->編譯,則只對(duì)選中文件進(jìn)行編譯),然后再整體編譯連接,編譯通過(guò)了,但是鏈接又出問(wèn)題了,提示如下:

warning C4727: 具有相同時(shí)間戳的名為 xxx.pch 的 PCH 已存在于yyy.obj 和 yyy.obj 中。使用第一個(gè) PCH。
MyDlg2.obj : error LNK2005: ___@@_PchSym_@00@UdliphkzxvUexUszmarUKltKoyKrqKluKpmKqsKltKroKonKluKqoKoleBUivovzhvUnbwotOlyq@ 已經(jīng)在 MyDlg.obj 中定義

         我暈!然后又改成 “使用預(yù)編譯頭(/Yu)”,當(dāng)編譯正要成功是,悲劇又來(lái)了:

.\MyDlg.cpp(4) : fatal error C1854: 無(wú)法覆蓋在創(chuàng)建對(duì)象文件“xxx\release\mydlg.obj”的預(yù)編譯頭過(guò)程中形成的信息

        然后我就反復(fù),將【創(chuàng)建/使用編譯頭】,在這幾個(gè)選項(xiàng)中切換嘗試,但錯(cuò)誤始終存在。正在我無(wú)奈之極,突然搜到了MSDN中對(duì)錯(cuò)誤C4727和C1854的解釋:


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

錯(cuò)誤 C1854

Visual Studio 2010
無(wú)法覆蓋在創(chuàng)建對(duì)象文件“filename”的預(yù)編譯頭過(guò)程中形成的信息

您對(duì)同一文件指定 /Yc(創(chuàng)建預(yù)編譯頭文件)選項(xiàng)后指定了 /Yu(使用預(yù)編譯頭文件)選項(xiàng)。 某些聲明(如包括__declspecdllexport 的聲明)使此操作無(wú)效。


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

編譯器警告(等級(jí) 1)C4727

Visual Studio 2010
在 obj_file_1 和 obj_file_2 中找到具有相同時(shí)間戳的名為 pch_file 的 PCH。使用第一個(gè) PCH。

如果用 /Yc 編譯多個(gè) compiland,并且其中的編譯器能夠用相同的 .pch 時(shí)間戳標(biāo)記所有的 .obj 文件,將發(fā)生 C4727。

要消除此警告,請(qǐng)用 /Yc /c 編譯一個(gè)源文件(創(chuàng)建 pch),并用 /Yu /c 分別編譯其他的源文件(使用 pch),然后再將它們鏈接到一起。

因此,如果使用了下面的選項(xiàng)就會(huì)生成 C4727:

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

您可改用下面的選項(xiàng):

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

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

有關(guān)更多信息,請(qǐng)參見(jiàn)

        

        MSDN對(duì)C4727是這樣解決的:

您可改用下面的選項(xiàng):

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

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

        原本以為要手動(dòng)使用命令含編譯所有文件,我想還是算了,因?yàn)槲业墓こ逃?0多個(gè)文件,除非寫(xiě)成bat,否則編譯還會(huì)累死。幸好我不會(huì)bat,沒(méi)有動(dòng)手去寫(xiě)。我猜想VS功能這么強(qiáng)大,既然報(bào)錯(cuò)了,錯(cuò)誤應(yīng)該有解決辦法的,不可能讓我們手動(dòng)去編譯。在查看工程屬性的時(shí)候,無(wú)意間,點(diǎn)到了stdafx.cpp,豁然開(kāi)朗!


然后按照MSDN的那個(gè)解覺(jué)辦法的原理,進(jìn)行設(shè)置,就OK了。對(duì)工具和問(wèn)題原理不熟,害我走這么多的彎路啊。


總結(jié)下,大致四種解決的辦法:

1. 如果無(wú)意間,刪掉xxx.pch文件,如果編譯器報(bào)錯(cuò) “C1083無(wú)法打開(kāi)xxx.pch”,一般只需要清理解決方案,然后rebuild all就可以了。

2.如果1不管用,將【創(chuàng)建/使用預(yù)編譯頭】改為 “不使用編譯頭”,然后清理解決方案,rebuild即可。

3.如果仍然不管用,將【創(chuàng)建/使用預(yù)編譯頭】改為 “創(chuàng)建預(yù)編譯頭”,然后清理解決方案,rebuild即可。

4.如果上述方法,還不管用。將【創(chuàng)建/使用預(yù)編譯頭】改回 “使用預(yù)編譯頭”,然后將“stdafx.cpp”的屬性中【創(chuàng)建/使用預(yù)編譯頭】,改成 "創(chuàng)建預(yù)編譯頭",將其他所有的.cpp文件的預(yù)編譯屬性均該為 “使用預(yù)編譯頭” ,清理解決方案,然后rebuild即可。

注意:每次更改屬性后,都要清理解決方案,如果工程目錄下的.pch文件仍然存在,要手動(dòng)刪掉。

盡量不要使用2、3的方法,應(yīng)直接使用4的方法,雖然麻煩點(diǎn),但是值得的,免得后面哪里刪錯(cuò)了有出現(xiàn)這鬼錯(cuò)誤。


預(yù)編譯頭是很有用的,不要因?yàn)殄e(cuò)誤而認(rèn)為他礙眼,也不要因?yàn)閂C每個(gè)源文件前面都要包含stdafx.h而覺(jué)得麻煩。下面是別人對(duì)這個(gè)錯(cuò)誤以及對(duì)編譯頭的分析,

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多