2012-06-28 265 views
22

我有以下錯誤LNK2019:無法解析的外部符號_main函數___tmainCRTStartup引用,LNK2019:無法解析的外部符號_main函數___tmainCRTStartup引用

有很多關於此錯誤的線程,但沒有這些解決方案的工作了我。而且,沒有人解釋爲什麼這個錯誤在這裏。

我想:在連接屬性http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/14e85604-6929-4707-a22e-8cdf596926a6

  • 沒有嘗試過,並懷疑這些也將無法正常工作:

    爲什麼我得到這個錯誤,解決方案是什麼?

  • +1

    你有'int main(char ** argv,int argc)'函數嗎? – Linuxios

    +3

    @Linuxios,它的「int main(int argc,char ** argv)」(你的原型的順序是錯的) – BlakBat

    +1

    @BlakBat:謝謝。抱歉。無論如何,我甚至都沒有在Windows上工作,但這是所有地方的簽名。衛生署。 – Linuxios

    回答

    27

    你的項目類型是什麼?如果它是「Win32項目」,則入口點應爲(w)WinMain。如果它是「Win32控制檯項目」,那麼它應該是(w)main。取決於是否定義了UNICODE,名稱_tmain被定義爲mainwmain

    如果是DLL,那麼DllMain

    項目類型可以在項目屬性,鏈接器,系統,子系統下看到。它會說「控制檯」或「Windows」。

    請注意,入口點名稱因UNICODE是否定義而異。在VS2008中,它是默認定義的。

    正確的原型主要是要麼

    int _tmain(int argc, _TCHAR* argv[]) 
    

    int _tmain() 
    

    確保它是其中之一。

    編輯:

    如果你在_TCHAR得到一個錯誤,將一個

    #include <tchar.h> 
    

    如果您認爲問題出在頭一個,去與主文件的屬性(),並在預處理器下,啓用預處理文件的生成。然後編譯。你會得到一個與.i擴展名相同的文件。打開它,看看main()函數是否有什麼不幸的事情發生。可以有流氓#定義在理論上...

    EDIT2:

    利用所定義的UNICODE(這是默認值),連接器預計將wmain入口點(),而不是主要的()。 _tmain具有UNICODE不可知的優勢 - 它可以轉換爲主要或主要。

    前一段時間,有一個理由來維護ANSI構建和Unicode構建。在Windows 95/98/Me中Unicode支持嚴重不完整。主要的API是ANSI,Unicode版本存在於這裏和那裏,但不是普遍存在。此外,VS調試器無法顯示Unicode字符串。在NT內核操作系統(即Windows 2000/XP/Vista/7/8/10)中,Unicode支持是主要的,並且ANSI功能被添加在頂層。所以從VS2005開始,項目創建時的默認值就是Unicode。這意味着 - wmain。他們無法保持相同的入口點名稱,因爲參數類型不同。 _TCHAR被定義爲char或wchar_t。所以_tmain是main(int argc,char ** argv)或wmain(int argc,wchar_t ** argv)。

    之所以在某個時候出現_tmain錯誤,可能是因爲您沒有將argv的類型更改爲_TCHAR**

    如果你不打算永遠支持ANSI(可能不是),你可以重新制定你的入口點

    int wmain(int argc, wchar_t *argv[]) 
    

    並刪除tchar.h包括線。

    +0

    項目類型是控制檯 –

    +0

    我試着將int main()更改爲int _tmain()並且仍然存在lnk2019錯誤 –

    +0

    int _tmain(int argc,_TCHAR * argv []) 導致錯誤C2061:語法錯誤:identifier'_TCHAR 「;我嘗試用int main(int argc,char ** argv)來返回初始lnk2019錯誤 –

    0

    在Linux和Windows這main作品 - 發現通過試錯和他人的幫助所以不能解釋爲什麼它的工作原理,它只是做int main(int argc, char** argv)

    沒有必要tchar.h

    ,這裏是維基百科上的相同答案Main function

    +0

    曾聽說過wmain()? –

    3

    我在嘗試關閉控制檯應用程序項目中的預編譯頭文件並刪除頭文件stdafx時出現此錯誤。^ h

    要解決這個問題去你的項目屬性 - >鏈接器 - >子系統 和值更改爲沒有設置

    在主類中,使用他人已經提到了標準C++的主要功能protoype :

    int main(int argc, char** argv) 
    
    1

    我發現,當我選擇的 項目 - >屬性 - >連接器 - >系統 - >於子系統的>控制檯選項(/子系統:控制檯), 並確保包括 功能: int _tmain(int argc,_TCHAR * argv []){return 0} 所有的編譯,鏈接和運行都可以;

    +0

    確保包含tchar.h – Shania

    +0

    這也適用於我。事實上,當子系統「未設置」時它也起作用。 – user2799508

    5

    因爲它尚未提到的,這是我的解決方案:

    我爲我的項目創建一個新的配置後過這樣的錯誤了DLL。我必須去Project Properties -> Configuration Properties -> General並將Configuration Type更改爲Dynamic Library (.dll)

    因此,如果您在嘗試其他任何操作後仍遇到問題,請檢查配置類型是否適合您的項目。如果設置不正確,編譯器將尋找錯誤的主符號。在我的情況下,它正在尋找WinMain而不是DllMain

    1

    我有這個錯誤時,意外地將wmain放在命名空間中。 wmain不應該在任何命名空間中。此外,我在我使用的一個庫中有一個主要功能,而VS從那裏開始了主要功能,甚至讓它變得更加陌生。

    +0

    我敢打賭,這是很多情況下的問題。 –

    1

    我在幾分鐘前遇到了這個問題。當我將'extern'C''添加到main()定義時,它消失了。

    奇怪的是,我昨天寫的另一個簡單的程序幾乎是相同的,沒有extern「C」,但沒有鏈接器錯誤編譯。

    這讓我覺得這個問題是一些微妙的設置,可以在一些配置對話框中找到,而'extern「C」'並不真正解決底層問題,但表面上可以讓事情起作用。

    2

    如果您有一個「Win32項目」+定義了一個WinMain,並且您的子系統鏈接器設置被設置爲WINDOWS,如果有人將鏈接器設置中的「其他選項」設置爲「/ SUBSYSTEM: CONSOLE」(貌似優於實際的子系統設置這個額外的設置。

    0

    對我來說,那是因爲我不小心刪除(不刪除)的stdafx.htargetver.h文件在頭文件部分。

    添加這些文件回到頭文件並且問題解決了。

    我有這些:

    #pragma comment(linker, "/entry:\"mainCRTStartup\"") // set the entry point to be main() 
    

    我只需要評論說,(在前面//),它是很好的。

    0

    我也曾在Visual Studio 2015中發生過這種情況,原因很有趣。只是在這裏添加它,以防其他人發生。

    我已經有項目中的文件數量,我正在添加另一個主要功能,但是當我最初添加文件時,我在擴展名(.coo而不是.cpp)中輸入了拼寫錯誤。我糾正了這個錯誤,但是當我完成時,我得到了這個錯誤。事實證明,Visual Studio很聰明,當添加文件時,由於最初的擴展,它決定它不是源文件。

    右鍵單擊解決方案資源管理器中的文件並選擇屬性 - >常規 - > ItemType並將其設置爲「C/C++編譯器」修復了此問題。

    -1

    我以前遇到過這個問題,但解決了。主要的問題是我錯誤地拼寫了int main()函數。而不是寫int main()我寫了int mian()....乾杯!

    +1

    這個答案對你自己來說太具體了。由於'主'在OP的問題中沒有任何拼寫錯誤,所以沒有理由認爲這是問題所在。 – lwassink

    +1

    OP沒有顯示任何源代碼,他只是說錯誤。今天我有同樣的錯誤,但後來意識到我拼錯了main這個詞,所以在糾正錯誤後消失了。 –

    0

    Screen snapshot Visual Studio 2015

    設置系統到控制檯,繼先前的建議。只有,還必須將字符集更改爲Unicode,請參閱上面的Visual Studio 2015的快照。

    相關問題