本來說要早早弄好的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試試
出來了,果然是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就消失了。