1. 程式人生 > >VC6編譯和連結的兩個頭疼問題

VC6編譯和連結的兩個頭疼問題

2007-07-20

#

周海漢 /文

為了清空,將debug目錄刪了。結果編譯時出如下錯誤:

fatal error C1083: Cannot open precompiled header file: ‘Debug/xxx.pch’:

No such file or directory

怎麼搞都不行。

歸結為同樣問題的錯誤:

fatal error C1010: unexpected end of file while looking for precompiled

header directive

原來,xxx.pch是預編譯標頭檔案生成的檔案。在project-settings裡面,選中編譯的專案和c/c++頁,在下拉框選 precompiled headers, 下面有四個選項。

1.不使用預編譯頭; 2.自動使用預編譯頭; 3.從標頭檔案建立預編譯頭,指定標頭檔案; 4.使用預編譯標頭檔案 stdafx.h

如果預編譯標頭檔案是stdafx.h,那麼其他的檔案都選4. 而stdafx.cpp選3,並且標頭檔案選stdafx.h

出現第一個編譯錯誤問題時,只需要把stdafx.cpp重編譯一下,預編譯的xxx.pch就生成了。而出現第二個編譯問題時,需要把 stdafx.h包含在檔案的最開始。

連結錯誤:

使用了靜態庫,有時出下面的錯誤:

LIBCD.lib(crt0dat.obj) : error LNK2005: __cinit already defined in libcmt.lib(crt0dat.obj) LIBCD.lib(crt0dat.obj) : error LNK2005: _exit already defined in libcmt.lib(crt0dat.obj) LIBCD.lib(crt0dat.obj) : error LNK2005: __exit already defined in libcmt.lib(crt0dat.obj)

這是庫和可執行程式使用了不同的庫所引起的衝突。在主程式中的project-settings的link頁,下拉框選input項,

在Ignore Librarys中增加: libc.lib,msvcrt.lib,mfc42.lib

若是debug版,則應為: libcd.lib,msvcrtd.lib,mfc42d.lib。

這時就可以編譯通過了。

類似問題: error LNK2001: unresolved external symbol __afxForceEXCLUDE

這是因為選了ignore all default libraries引起的,去掉就可以了。

如非註明轉載, 均為原創. 本站遵循

知識共享CC協議,轉載請註明來源