2013-06-28 128 views
3

是的我知道在Stackoverflow上有數百篇關於LNK2001的文章。 但他們都沒有解決我的問題。 所以我在這裏發佈我的解決方案。LIBCMT.lib:錯誤LNK2001:無法解析的外部符號_main

症狀: ATL DLL很好地編譯爲Debug,但因編譯爲Release的上述錯誤而失敗。

在互聯網上搜索一小時並找到無用的提示,如「你定義了main()函數嗎?」我認爲我必須爲我的具體問題發佈解決方案。

+0

嘗試過並且工作過。 –

+0

@Elmue - 將此重構爲一個Q&A-A對,我可以給它一個upvote ...(兩個upvotes,偶數;) – LThode

+0

你是對的。我這樣做了。 – Elmue

回答

1

重要事項: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ü

相關問題