VC6编译和链接的两个头疼问题

abloz 2007-07-20
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协议,转载请注明来源