关于error LNK2001: unresolved external symbol "__declspec(dllimport) public

本来说要早早弄好的CCV,现在由于学校渣一般的网速(代码我昨晚通宵才checkout出来)以及自己的惰性,可能要晚几天了,但是楼主说过的每天更新一篇博文的承诺绝对不会食言,楼主会尽快补上的,这几天遇到了一个小bug,现在总结一下

error LNK2001: unresolved external symbol "__declspec(dllimport) public这个bug

error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,int)" (__imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z)

首先是forgetitit同学的方法,http://blog.csdn.net/forgetitit/article/details/4425899,可能是因为Unicode搞的鬼。于是修改工程属性,从工程Property Page-General-Charater set修改为Not set,再编译,但是我的问题仍然没有解决,于是继续搜。。。。

http://bbs.csdn.net/topics/360250494里发现了和我犯了完全一样错误的case,解决方法是把Code Generation 里 project option里的/GZ删除后,编译就通过了,但是楼主表示在vs2010下的C/C++中Code Generation中根本就没有project option,o(╯□╰)o,只能继续查

然后看见了这篇博客http://blog.sina.com.cn/s/blog_5d890d070100fpnv.html,楼主改了线程,但还是没用,一个晚上就这样过去了8点到深夜2点(我会说是学校网速逼得吗),整整6个小时啊,楼主都有点绝望了,有点想放弃了,想明天换台电脑试试了,不过就在这时,没错,就在刚刚,楼主在码第二段的字的时候,柳暗花明的事情出现了!!!楼主找到了/GZ,竟然在C/C++--->advanced------>calling convention 中,楼主既然找到了问题所在,就一定要解决它,但是实在是太困了,明天上午还有课,所以楼主先去困觉了,明天接着更。

下面是一些其他的解决方法,但是都不能用啊

http://stackoverflow.com/questions/9678125/library-linker-errors-driving-me-mad

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8bb63f7e-86d7-4f20-a1f8-2548fe654ae1/

http://www.cplusplus.com/forum/general/31220/

http://stackoverflow.com/questions/10788331/linker-errors-while-using-vs-c-2010-express-edition

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/66f3eaaa-0842-469e-ab2b-1bb2d2f99d50/

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=477093

神贴,竟然是VS2008和2010之间不兼容的问题,晚上换个2008试试

http://jaewon.mine.nu/jaewon/wp-content/uploads/2011/01/LNK2001-for-std_string_npos-error-when-inheriting-from-std_wstring.pdf

出来了,果然是vs2008和vs2010之间不兼容的事。。。。。。就是上面那篇问答里的原因,现在换用vs2008,可以build了,没error,但是运行最新代码,CCV223,报内存错误,明天再搞吧,两点多才下好,等装好到现在都快4点了,还好今天的任务完成了。。。。

关于内存堆栈错误,今天查了一下,好像是CCV本身自带的bug,我会单独出一篇博客讲解,现在总结一下。

首先总结一下解决问题方法上面的问题。

拿到问题后不要慌,不要燥,仔细分析问题,先搞清楚问题是什么,然后一个一个方法试验,不要东一榔头西一棒子,解决问题时方法要有系统性,一步一步一点一点的解决。

再总结一下error2001

字面意义上理解是表示未发现外部符号,可能出问题的地方太多,下面列举一下

1、首先最有可能的是lib文件库没加进去,查看linker->input->Additional dependencies 里面有没有包含报错的lib文件,如果没有,请加上

2、可能是因为Unicode搞的鬼,可以参考http://blog.csdn.net/forgetitit/article/details/4425899,从工程Property Page-General-Charater set修改为Not set,再编译,看看问题有没有解决。。。

3、工程和面板的线程不一样,参考http://blog.sina.com.cn/s/blog_5d890d070100fpnv.html,修改下线程,使之一致,观察问题有没有解决。。。

4、在C/C++--->advanced------>calling convention 中,将/GZ给换了(不知道为什么),看看问题有没有解决。。。

5、是编译器不兼容的事,楼主怎么也不会想到是VS2008和VS2010之间竟然还有不兼容的问题,但是楼主看了http://jaewon.mine.nu/jaewon/wp-content/uploads/2011/01/LNK2001-for-std_string_npos-error-when-inheriting-from-std_wstring.pdf这篇帖子,换了VS2008之后,确实程序build的error就消失了。

原文地址:https://www.cnblogs.com/hqqxyy/p/2970390.html