unresolved external symbol錯(cuò)誤及其解決方法
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/CWin4_1.exe : fatal error LNK1120: 1 unresolved externals
執(zhí)行 link.exe 時(shí)出錯(cuò).
CWin4_1.exe - 1 error(s), 0 warning(s)
第一種解決方法:
1、“Project”->“settings”->“c/c++”
“Catagory” 選擇“Code Generation”
?“use run-time library”選擇“debug multithreaded”
此時(shí)確定一般解決問題,也有可能出現(xiàn)如下問題提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Hello.exe : fatal error LNK1120: 1 unresolved externals
此時(shí),進(jìn)行第二步操作:
2、[Project] --> [Settings] --> 選擇"Link"屬性頁,
在Project Options中將/subsystem:console改成/subsystem:windows
溫馨提示:在Project Options窗口,右邊滑動條向下滑動就會找到該項(xiàng)!


第二種解決方法:
1.檢查是否包含頭文件afx.h
2.打開project->settings->general->microsoft foundation classes->
選use MFC in a static library
或選 use MFC in a shared DLL(需要把MFC的動態(tài)庫放在system32文件夾下) .
如果錯(cuò)誤提示為:
error LNK2001: unresolved external symbol _main
那么:unresolved external symbol _main的錯(cuò)誤提示是你的cpp文件中沒有main函數(shù),
在工程中改 settings 是沒有用的。
如果你做的控制臺程序,使用/subsystem:console,并且cpp中要有main函數(shù)。
如果你做的windows圖形界面程序,只需要改/subsystem:windows一處就行,并且cpp中要有WinMain函數(shù)?
在網(wǎng)上下了一個(gè)小程序,里面只有CPP文件和一個(gè)resource.h,這是一個(gè)WinMain程序,懶得建立一個(gè)win32工程,直接上來就打開CP文件進(jìn)行build,編譯器報(bào)告上面的錯(cuò)誤(如題).
原因:? ?VC++此時(shí)假定你要建立Console程序而不是GUI程序,而Console程序的Startup Code要載入的是main()而不是Winmain(),導(dǎo)致連接失敗。
改正的方法:? ? 將菜單Project/Settings下Link項(xiàng)Option內(nèi)的/subsystem:console改為/subsystem:windows。另外也可以先New一個(gè)Win32 GUI Project,再拷貝入你的程序,再Build。
error LNK2001: unresolved external symbol 處理
解決外部符號錯(cuò)誤:_main,_WinMain@16,__beginthreadex
在創(chuàng)建MFC項(xiàng)目時(shí), 不使用MFC AppWizard向?qū)? 如果沒有設(shè)置好項(xiàng)目參數(shù), 就會在編譯時(shí)產(chǎn)生很多連接錯(cuò)誤, 如error LNK2001錯(cuò)誤, 典型的錯(cuò)誤提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
1. Windows子系統(tǒng)設(shè)置錯(cuò)誤, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows項(xiàng)目要使用Windows子系統(tǒng), 而不是Console, 可以這樣設(shè)置:
[Project] --> [Settings] --> 選擇"Link"屬性頁,
在Project Options中將/subsystem:console改成/subsystem:windows
2. Console子系統(tǒng)設(shè)置錯(cuò)誤, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制臺項(xiàng)目要使用Console子系統(tǒng), 而不是Windows, 設(shè)置:
[Project] --> [Settings] --> 選擇"Link"屬性頁,
在Project Options中將/subsystem:windows改成/subsystem:console
3. 程序入口設(shè)置錯(cuò)誤, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC項(xiàng)目的程序入口函數(shù)是WinMain, 如果編譯項(xiàng)目的Unicode版本, 程序入口必須改為wWinMainCRTStartup, 所以需要重新設(shè)置程序入口:
[Project] --> [Settings] --> 選擇"Link"屬性頁,
在Category中選擇Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 線程運(yùn)行時(shí)庫設(shè)置錯(cuò)誤, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
這是因?yàn)镸FC要使用多線程時(shí)庫, 需要更改設(shè)置:
[Project] --> [Settings] --> 選擇"C/C++"屬性頁,
在Category中選擇Code Generation,
再在Use run-time library中選擇Debug Multithreaded或者multithreaded
其中,
Single-Threaded 單線程靜態(tài)鏈接庫(release版本)
Multithreaded 多線程靜態(tài)鏈接庫(release版本)
multithreaded DLL 多線程動態(tài)鏈接庫(release版本)
Debug Single-Threaded 單線程靜態(tài)鏈接庫(debug版本)
Debug Multithreaded 多線程靜態(tài)鏈接庫(debug版本)
Debug Multithreaded DLL 多線程動態(tài)鏈接庫(debug版本)
單線程: 不需要多線程調(diào)用時(shí), 多用在DOS環(huán)境下
多線程: 可以并發(fā)運(yùn)行
靜態(tài)庫: 直接將庫與程序Link, 可以脫離MFC庫運(yùn)行
動態(tài)庫: 需要相應(yīng)的DLL動態(tài)庫, 程序才能運(yùn)行
release版本: 正式發(fā)布時(shí)使用
debug版本: 調(diào)試階段使用
————————————————
版權(quán)聲明:本文為CSDN博主「freepenix」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u014513151/article/details/48602781/