在 Windows 環境下使用 MinGW/GCC 編譯 C 程式時,初學者常遇到 undefined reference to `WinMain@16' 錯誤。本文記錄該錯誤成因、排查過程與解決方案,幫助快速定位問題。
undefined reference to `WinMain@16'
編譯器未報告具體行號錯誤,且程式碼語法看似正確,導致排查困難。
經搜尋發現:主函數名稱拼寫錯誤。將 main() 誤寫為 mian()。
// 錯誤代碼
#include <stdio.h>
int mian() { // 拼寫錯誤:mian 而非 main
printf("Hello World\n");
return 0;
}
Windows 程式進入點預設為 WinMain(GUI 程式)或 main(控制台程式)。當鏈接器找不到 main 時,會嘗試尋找 WinMain 作為備選進入點,兩者皆缺失時拋出此錯誤。
mainint main(void)、int main(int argc, char *argv[]) 等WinMain 並配置編譯選項 -mwindows#include <stdio.h>
int main(void) { // 修正拼寫
printf("Hello World\n");
return 0;
}
main、mian、Main 完全不同| 錯誤訊息 | 常見原因 | 解決方向 |
|---|---|---|
| undefined reference to `WinMain@16' | main 拼寫錯誤 / 專案類型不匹配 | 修正 main 拼寫 / 改為 Console 專案 |
| undefined reference to `main' | 完全缺少 main 函數 | 添加標準 main 函數 |
| multiple definition of `main' | 多個源檔各定義一個 main | 保留單一 main,其餘改為普通函數 |
這個看似離譜的錯誤,實則是拼寫疏忽的「偽裝」。養成檢查主函數拼寫的習慣,能省去大量無效排查時間。