C++使用MinGW编译出现WinMain@16错误无法在终端输出怎么解决
问题原因与排查解决方案
错误根因
1. 编译阶段undefined reference to 'WinMain@16'报错原因
该错误属于链接阶段错误,常见触发场景如下:
- 源代码未正确定义标准控制台程序入口函数
main:包括函数名拼写错误(如大小写错误、单词拼错)、未实现该函数、编译时未将包含main函数的源文件加入编译指令。 - 编译参数配置错误:使用MinGW编译时加了
-mwindows参数,该参数用于生成无控制台窗口的GUI程序,要求程序入口为WinMain而非main,如果开发的是控制台程序加了该参数就会触发找不到入口的链接错误。
2. PowerShell执行.a.exe报错原因
- 首先编译阶段已经报错退出,实际并未生成可用的可执行文件,你尝试运行的是无效的残留文件。
- 执行指令格式错误:PowerShell中执行当前目录下的可执行文件的正确格式是
.\a.exe,你漏掉了.和a.exe之间的反斜杠,PowerShell会将.a.exe识别为加载名为a的模块操作,自然会报模块未找到的错误。
排查解决步骤
- 检查源代码:确认存在正确定义的
main函数,标准写法为int main()或int main(int argc, char* argv[]),函数名全小写无拼写错误。 - 修正编译指令:如果开发的是控制台程序,编译时不要加
-mwindows参数,同时确认编译指令中包含了所有需要编译的源文件,示例正确编译指令:g++ 你的源代码文件名.cpp -o a.exe。 - 确认编译成功:执行编译指令后没有输出任何报错,再检查对应目录下是否生成了a.exe文件。
- 修正执行指令:在PowerShell中运行程序时输入
.\a.exe即可正常执行。
内容的提问来源于stack exchange,提问作者Ashish Malhotra
相关产品推荐
相关产品推荐

