最近在调试程序的时候出现了很多问题,现总结问题如下
1:出现最多的是error LNK2001: unresolved external symbol "void __cdecl ErrDisplay(class CString &)" (?ErrDisplay@@YAXAAVCString@@@Z)等等之类的,这个是编译成功了,连接的时候没有找到这个函数名,可能的问题就是一个是c语言或者其他语音编写的库文件,而当前工程为c++编译器,就会出现这样的情况。
2:另一个问题是定义了一个类,但是类的成员函数不小心被注释掉了,造成连接错误
3:另一个问题是LNK4098: defaultlib "LIBCMT" conflicts with use of other libs;是由于各个库的设置不一致引起的,一般在project-setting-c++-code 里面设置一致。
4:再一个是error LNK2001: unresolved external symbol __endthreadex,把线程里面的设置为多线程就可以了。
5:再一个是mkl_c.lib : warning LNK4003: invalid library format; library ignored,error LNK2001: unresolved external symbol "void __cdecl dgemv(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (?dgemv@@YAXPBDPBH1PBN21212PAN1@Z),开始以为是因为第一句话mkl_c.lib被忽略了而引起的,事实上不是这个原因,是因为dgemv为c编译的,而这里用的是c++编译器,下面同第一个问题。
6:error LNK2001: unresolved external symbol "void * __cdecl operator new(unsigned int)" (??2 at @Z)这样的错误属于系统错误,解决方法:
1、Configuration Properties -> Linker -> Input -> Igonre Specific Library 里追加以下两个lib
Nafxcwd.lib Libcmtd.lib
2、Configuration Properties -> Linker -> Command Line -> Addtional Option 从新追加这两个lib
Nafxcw.lib Libcmt.lib
等类似与这样的错误,花了我不少时间,以后主意点。
7:error LNK2019: 无法解析的外部符号 "void __cdecl ErrDisp(class ATL::CStringT
这个问题很奇怪,主要是在静态库函数中用到了CString这个类,而调用的时候就出现了上面的问题,在网上查了很多资料都不管用,看了微软的技术支持说加入CString的导入模板就可以了,害有的说加入cstring.h或者atlstr.h就可以了,但是我都试了还是解决不了问题,最后害的我把所有的CString都转化为char*,其实解决这个问题的方法是属性->配置属性->常规->MFC的使用把这项改为“使用标准 Windows 库”,然后重新编译就可以了。补充:我在vc6下面编译没有出现这个问题,在vs2005下面编译就出现了这个问题,于是认为是由于参数设置的问题,所以就试了很多,最后解决了问题。