無(wú)法解析的外部符號(hào) _WinMain@16,該符號(hào)在函數(shù)中被引用
無(wú)法解析的外部符號(hào) _WinMain@16,該符號(hào)在函數(shù) ___tmainCRTStartup 中被引用
出現(xiàn)原因:
? ? ? ? 連接程序在負(fù)責(zé)連接可執(zhí)行程序時(shí),選擇相應(yīng)的c/c++運(yùn)行時(shí)啟動(dòng)函數(shù)。如果設(shè)定了/subsystem:windows連接程序開(kāi)關(guān),那么連接程序會(huì)試圖尋找WinMain或wWinMain函數(shù)。如果連個(gè)函數(shù)都不存在,那么就會(huì)返回一個(gè)“一個(gè)未解決的外部符號(hào)”(無(wú)法解析的外部符號(hào) _main,該符號(hào)在函數(shù) ___tmainCRTStartup 中被引用)
? ? ? ?同樣,如果設(shè)定了/subsystem:console連接程序開(kāi)關(guān),那么連接程序就會(huì)試圖尋找main函數(shù)或者wmain函數(shù),如果找不到這連個(gè)函數(shù)是,連接程序返回unresolved externel symbol錯(cuò)誤信息。
? ? ??一般情況下,如果是windows程序,那么WinMain是入口函數(shù),在VS2008中新建項(xiàng)目為“win32項(xiàng)目”如果是dos控制臺(tái)程序,那么main是入口函數(shù),在VS2008中新建項(xiàng)目為“win32控制臺(tái)應(yīng)用程序”而如果入口函數(shù)指定不當(dāng),很顯然c語(yǔ)言運(yùn)行時(shí)找不到配合函數(shù),它就會(huì)報(bào)告錯(cuò)誤。
修改設(shè)置適應(yīng)你的需求
變成新手容易犯的一個(gè)錯(cuò)誤是,創(chuàng)建應(yīng)用程序時(shí)選擇了錯(cuò)誤的應(yīng)用程序類(lèi)型。例如,開(kāi)發(fā)人員創(chuàng)建了一個(gè)新的Win32應(yīng)用程序項(xiàng)目,并給這個(gè)項(xiàng)目創(chuàng)建了一個(gè)入口函數(shù)main。在這種情況下,創(chuàng)建應(yīng)用程序時(shí),開(kāi)發(fā)人員就會(huì)看到一個(gè)連接程序的錯(cuò)誤信息。這是因?yàn)閃in32應(yīng)用程序項(xiàng)目設(shè)置了/subsystem:windows連接程序開(kāi)關(guān),但是卻找不到相應(yīng)的Winmain或者wWinmain函數(shù)。這是侯你可以有以下幾種解決方案。
1 將main函數(shù)改為Winmain函數(shù)
2 將/subsystem:windows開(kāi)關(guān)改為/subsytem:console
3全部刪除/subsytem:windows開(kāi)關(guān),讓連接程序根據(jù)源代碼中實(shí)現(xiàn)的函數(shù)進(jìn)行正確的操作
更改/subsystem:windows的方法:
右鍵點(diǎn)擊-->項(xiàng)目,選擇---->屬性,屬性頁(yè) 窗口彈出;
接著,點(diǎn)擊連接器->系統(tǒng),在右側(cè)會(huì)看到“子系統(tǒng)”選項(xiàng),在這里可以選擇相應(yīng)的連接程序開(kāi)關(guān).