是的我知道在Stackoverflow上有數百篇關於LNK2001的文章。 但他們都沒有解決我的問題。 所以我在這裏發佈我的解決方案。LIBCMT.lib:錯誤LNK2001:無法解析的外部符號_main
症狀: ATL DLL很好地編譯爲Debug,但因編譯爲Release的上述錯誤而失敗。
在互聯網上搜索一小時並找到無用的提示,如「你定義了main()函數嗎?」我認爲我必須爲我的具體問題發佈解決方案。
是的我知道在Stackoverflow上有數百篇關於LNK2001的文章。 但他們都沒有解決我的問題。 所以我在這裏發佈我的解決方案。LIBCMT.lib:錯誤LNK2001:無法解析的外部符號_main
症狀: ATL DLL很好地編譯爲Debug,但因編譯爲Release的上述錯誤而失敗。
在互聯網上搜索一小時並找到無用的提示,如「你定義了main()函數嗎?」我認爲我必須爲我的具體問題發佈解決方案。
重要事項:LNK2001可能有數百萬個原因!
如果我的解決方案並不在您的具體情況幫助,如果這個頁面既不:http://msdn.microsoft.com/en-us/library/f6xx1b1z%28v=vs.71%29.aspx
然後意識到到儘可能多的關鍵字包括到你的搜索成爲可能。就像我的情況一樣「LIBCMT.lib LNK2001 _main」。這對於避免淹沒在數百萬搜索結果中至關重要。
LIBCMT.LIB定義了諸如memcpy,swprintf等函數,它們是CRT函數。 (C運行時庫)
我在我的項目中使用了其中的一些功能。那麼爲什麼Debug版本和Release版本沒有?
的原因是CRT庫需要初始化,它有一個啓動代碼必須(_main期間通常)
如果項目定義_ATL_MIN_CRT CRT啓動代碼是從EXE,DLL在排除調用一次發佈版本以減小文件大小。
認識到這一點的解決方案很簡單:
解決方案A)從項目設置
溶液B)在文件的結尾刪除_ATL_MIN_CRT Stdafx.h中,就把這行:
#undef _ATL_MIN_CRT
解決了這個問題。
當我再用我的班,我把在其他項目中開始我的課:
#ifdef _ATL_MIN_CRT
#error _ATL_MIN_CRT is not valid for this project
#endif
這保證了重用我的代碼在將來,我會立即警告另一個項目。
Elmü
嘗試過並且工作過。 –
@Elmue - 將此重構爲一個Q&A-A對,我可以給它一個upvote ...(兩個upvotes,偶數;) – LThode
你是對的。我這樣做了。 – Elmue