經常在鏈接是報link2001錯誤,其中一般是函數體沒有定義錯誤。但是排除以上簡單的外,還有一種如下無法解析系統文件中的函數定義。如下:
LINK : warning LNK4098: 默認庫“LIBCMT”與其他庫的使用沖突;請使用 /NODEFAULTLIB:library
libcpmtd.lib(cerr.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
。。。。。。
libcpmtd.lib(_tolower.obj) : error LNK2019: 無法解析的外部符號 __calloc_dbg,該符號在函數 __Getctype 中被引用
像這種情況,可以推測運用了錯誤的運行庫包。
在一程序中使用不同類型的運行時庫或使用調試和非調試版本的運行時庫,則將收到此鏈接錯誤。
例如,編譯一個文件以使用一種運行時庫,而編譯另一個文件以使用另一種運行時庫(例如單線程運行時庫對多線程運行時庫),試圖鏈接它們,則將得到此警告。應將所有源文件編譯為使用同一運行時庫。
其實就是調正編譯器選項參數:/MD、/MT 和 /LD
在vc8中,在“配置屬性-->C/C++-->代碼生成-->運行時庫”中將“多線程(/MT)”統一改為“多線程調試(/MTd)”即可。