本則 FAQ 由 renderer大大 撰寫。謹此致謝。
-----------------------------------------------------
請問為什麼會有 _main/WinMain linking error 的錯誤訊息?
情況:編譯無誤,但連結時卻出現如以下的錯誤:
VC++:
1. error LNK2001: unresolved external symbol _main
2. error LNK2001: unresolved external symbol _WinMain@16
Dev-C++
1. [Linker error] undefined reference to `WinMain@16'
成因:製作可執行檔(.EXE)需要所謂的程式進入點(Entry-Point),然而連結器
(Linker)沒有找到預設的程式進入點:main 或 WinMain。
解說:程式進入點是一個特殊的函式(Function),是執行可執行檔時,首先會被
執行的函式 (Global/Static 變數初始化函式可能會更早被執行),一般
C/C++ 的預設的程式進入點為 main 函式,而 Windows 下的視窗程式
(Win32 Application)則以 WinMain 函式為程式進入點。
錯誤排除方式:
1. 如果是一般程式(或說 Console 程式),則加入 main 函式,如果是 Win32
視窗程式,就加入 WinMain 函式。
2. 如果是使用 IDE 環境,請注意建立專案時所選擇的專案類型,Console 程式
請加 main,Win32 程式請加 WinMain,注意是否有搭配錯誤的情形。
3. 用 IDE 開啟別人的程式,打算重新編譯時,請開啟專案檔,而非 .h 或
.cpp 檔。否則按下編譯鍵,有些 IDE 會自行產生一份新的專案檔,其專案
設定不見得正確。如,該程式為 Win32 程式,也有提供 WinMain 函式,
然而 IDE 自行產生的專案設定卻把這份程式當作一般程式,於連結時,就會
產生找不到 _main 函式的情況。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: khoguan 來自: 220.130.208.168 (11/18 22:44)