VC6編譯和連結的兩個頭疼問題
#
周海漢 /文
為了清空,將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引起的,去掉就可以了。
如非註明轉載, 均為原創. 本站遵循