我有一些cpp文件,有的用了mfc,有的没有用mfc,当放在一起用的时候经常会报这样的错误:c:\dev\vs6\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
Error executing cl.exe.
Error executing cl.exe.
再一个个加上需要的头文件
而我建的工程是不用MFC的console,包含的文件里也没有用MFC的库函数的。另外,我非常不喜欢stdafx这个文件,真不知道用来做什么,什么地方该包含什么我还不知道吗。我在工程里一般是禁止使用什么precompile header
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/threadtest.exe : fatal error LNK1120: 2 unresolved externals
对于可能会出现重复包含的头文件,同时加上预编译语句,以免重复包含
#ifndef __XXX_INCLUDE_IN_
#define __XXX_INCLUDE_IN_
#include "XXXX.h"
#endif
同时WIN32的程序一般都使用多线程的运行库
/MDd
/MTd
/MD
/MT
Linking code compiled with /MT with the library LIBC.LIB causes LNK2001 on _beginthread, _beginthreadex, _endthread, and _endthreadex. 不过我还是不管3721把/MTd加到编译选项里了,好了一点,现在只剩:
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpmtd.lib(delop.obj)
Debug/threadtest.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.vc的编译器真是TMD要命
/MTd 静态DLL DEBUG
/MD 动态DLL RELEASE
/MT 静态DLL RELEASE
这样草草解决也不能算解决呀,问题原因都没找到,况且还有warning
不彻底解决程序以后还是会出毛病的