宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 3869|回复: 0

[VS常见错误] 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTSartup ...

[复制链接]
  • TA的每日心情
    开心
    2024-12-9 18:45
  • 签到天数: 124 天

    [LV.7]常住居民III

    admin 发表于 2015-3-10 13:19:09 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    用VS编写win32窗口程序编译时提示错误:
    错误        1        error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用        D:\VS\Win32\Demo\Demo\MSVCRTD.lib(crtexew.obj)
    错误        2        error LNK1120: 1 个无法解析的外部命令        D:\VS\Win32\Demo\Debug\Demo.exe

    如下图所示:

    _WinMain@16

    _WinMain@16


    通过反复调试都没找到原因,最后测试后发现少了一个C语言运行时头文件,从而引起的上面的错误。通常情况下如果出现上面的错误有两种情况:一是c语言运行时找不到适当的程序入口函数;二是入口函数之前全局变量定义出错。具体解决如下:
    第一,根据提示先查看入口函数是否有误,一般情况下如果是Windows应用程序,入口函数为WinMain、_tWinMain,在VS新建项目为“Win32项目”;如果是控制台程序,入口函数为main,在VS新建项目为“Win32控制台应用程序”。
    [C++] 纯文本查看 复制代码
    ……
    #define MAX_LOADSTRING 100
    //全局变量
    HINSTANCE m_hInst;                     //当前实例
    TCHAR szTitle[MAX_LOADSTRING];         //标题栏名称
    TCHAR szWindowClass[MAX_LOADSTRING];   //主窗口类名
    
    int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
            _In_opt_ HINSTANCE hPrevInstance,
            _In_ LPTSTR    lpCmdLine,
            _In_ int       nCmdShow)
    {
    ……
    }


    而本例中入口函数为_tWinMain,应该是正确的,但报错了。那么需要按下面步骤检查:第一、检查自己编写的程序是Windows窗口应用程序,还是控制台程序,并修改对应的属性。这样情况通常是新同学容易出现的错误。
    1、如果是Windows窗口应用程序,那么检查 项目(Project) -> 属性(Properties) -> 属性页 -> 配制属性(Configuration Properties) -> C/C++ -> 预处理器(Preprocessor) -> 预处理定义(Preprocessor Definitions) 看有无 _WINDOWS ,如果没有添加上,并确定保存;看有无 _CONSOLE 如果有则删除,并确定保存。如下图所示:

    Windows项目配制属性

    Windows项目配制属性


    同时检查 项目(Project) -> 属性(Properties) -> 属性页 -> 配制属性(Configuration Properties) -> 链接器(Linker) -> 系统(System) ->子系统(SubSystem)里是否是  窗口(Windows)(/SUBSYSTEM:WINDOWS),如果不是则改成 窗口(Windows)(/SUBSYSTEM:WINDOWS)确定保存。如下图所示:

    Windows项目配制属性连接器

    Windows项目配制属性连接器



    2、反之,如果是Windows控制台程序,那么检查 项目(Project) -> 属性(Properties) -> 属性页 -> 配制属性(Configuration Properties) -> C/C++ -> 预处理器(Preprocessor) -> 预处理定义(Preprocessor Definitions) 看有无 _CONSOLE  ,如果没有添加上,并确定保存;看有无 _WINDOWS 如果有则删除,并确定保存。同时检查 项目(Project) -> 属性(Properties) -> 属性页 -> 配制属性(Configuration Properties) -> 链接器(Linker) -> 系统(System) ->子系统(SubSystem)里是否是  控制台(CONSOLE)(/SUBSYSTEM:CONSOLE),如果不是则改成 控制台(CONSOLE)(/SUBSYSTEM:CONSOLE) 确定保存

    第二、如果上面所描述的检查正确后编译还报同样的错误,那么应检查下入口函数前面的全局变量定义中是否包含了C 运行时头文件,如果没包含应该添加上,编译后解决问题。如下图所示:

    全局变量的C运行时头文件

    全局变量的C运行时头文件









    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2025-5-7 09:04 , File On Powered by Discuz! X3.49

    快速回复 返回顶部 返回列表