带界面的vs程序编译错误:MSVCRT.lib(exe_main.obj) : error LNK2001: 无法解析的外部符号 main

博客主要讲述带界面的VS程序编译时出现无法解析外部符号main的错误。原因是C语言运行时找不到适当的程序入口函数,如Windows程序入口是WinMain,控制台程序入口是main。还给出了分别针对Windows程序和控制台程序的修改设置解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

带界面的vs程序编译出现以下错误:

MSVCRT.lib(exe_main.obj) : error LNK2001: 无法解析的外部符号 main

一、问题描述
MSVCRTD.lib(exe_main.obj) : error LNK2001: 无法解析的外部符号main,该符号在函数 中被引用  : 1 个无法解析的外部命令

二、原因及解决办法
产生这个问题的真正原因是c语言运行时找不到适当的程序入口函数,

一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2015中新建项目为“win32项目”

如果是dos控制台程序,那么main是入口函数,在VS2015中新建项目为“win32控制台应用程序”

而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误。

修改设置适应需求即可。

如果需要的是windows程序:
1.菜单中选择 “项目”->“属性”, 弹出属性页窗口。

2.依次选择:“配置属性”->“C/C++”->“预处理器”->“预处理器定义”,在其中删除_CONSOLE, 添加_WINDOWS。

3.依次选择:“配置属性”->“链接器”->“系统”->“子系统”项改为Windows(/SUBSYSTEM:WINDOWS)。


如果需要的是控制台程序:
1.菜单中选择 “项目”->“属性”, 弹出属性页窗口。

2.依次选择:“配置属性”->“C/C++”->“预处理器”->“预处理器定义”,在其中删除_WINDOWS, 添加_CONSOLE。

3.依次选择:“配置属性”->“链接器”->“系统”->“子系统”项改为CONSOLE(/SUBSYSTEM:CONSOLE)。

错误提示`LNK2019: 无法解析外部符号 WinMain`通常是当你试图链接生成的可执行文件(exe),但是缺少主入口点`WinMain`。在Windows平台下,`WinMain`是MFC(Microsoft Foundation Classes)程序的标准窗口回调函数,用于初始化应用程序的生命周期。 以下是可能导致此问题的一些原因和解决方法: 1. **未包含正确的头文件**: 确保你在`.cpp`文件中包含了`windows.h`和`mfc/appwin32.h`或其他相关的MFC头文件,这会声明`WinMain`函数。 ```cpp #include <windows.h> #include <mfcmfc/appwin32.h> ``` 2. **缺少MFC库**: 如果你是用MFC编写的,确保已经将MFC库(如`mfc10u.lib` 或 `msvcrt.lib`,取决于你的VS版本)添加到链接器输入中。 3. **静态链接还是动态链接**: 检查项目的配置是否选择了正确的链接模式。如果是静态链接,你可能需要包含`afxres.h`;如果是动态链接,确保已经添加了MFC库。 4. **主函数定义错误**: 检查`WinMain`函数的原型是否有误,应类似这样: ```cpp int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); ``` 注意`APIENTRY`和函数返回类型。 5. **混淆第三方库**: 如果你从外部库导入了`invoke_main`,确保它不是与`WinMain`冲突的名称。 如果以上步骤都检查过了,还有问题,可能是你的源代码有问题或者项目设置出现了遗漏。尝试清理并重新建立项目,或者检查最近的代码更改,看看是否有影响`WinMain`暴露的问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值