zoukankan      html  css  js  c++  java
  • unresolved external symbol _main解决办法

    原因:是在建项目或工程时把Win32 Application与Win32 Console Application弄错了。

    详见 VC++中的Win32 Application和Win32 Console Application区别

    http://lihuaxiong-001.blog.163.com/blog/static/2165829920099206263119/edit/

    在创建项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:

    libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16

    msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16

    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

    下面介绍解决的方法:

    1. Windows子系统设置错误, 提示:

    libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

    Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:

    [Project] --> [Settings] --> 选择"Link"属性页,

    在Project Options中将/subsystem:console改成/subsystem:windows

    2. Console子系统设置错误, 提示:

    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16

    控制台项目要使用Console子系统, 而不是Windows, 设置:

    [Project] --> [Settings] --> 选择"Link"属性页,

    在Project Options中将/subsystem:windows改成/subsystem:console

    注意:后边的/incremental:yes也得去掉

    3. 程序入口设置错误, 提示:

    msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16

    通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:

    [Project] --> [Settings] --> 选择"Link"属性页,

    在Category中选择Output,

    再在Entry-point symbol中填入wWinMainCRTStartup, 即可

    4. 线程运行时库设置错误, 提示:

    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

    这是因为MFC要使用多线程时库, 需要更改设置:

    [Project] --> [Settings] --> 选择"C/C++"属性页,

    在Category中选择Code Generation,

    再在Use run-time library中选择Debug Multithreaded或者multithreaded

    其中,

    Single-Threaded 单线程静态链接库(release版本)

    Multithreaded 多线程静态链接库(release版本)

    multithreaded DLL 多线程动态链接库(release版本)

    Debug Single-Threaded 单线程静态链接库(debug版本)

    Debug Multithreaded 多线程静态链接库(debug版本)

    Debug Multithreaded DLL 多线程动态链接库(debug版本)

    单线程: 不需要多线程调用时, 多用在DOS环境下

    多线程: 可以并发运行

    静态库: 直接将库与程序Link, 可以脱离MFC库运行

    动态库: 需要相应的DLL动态库, 程序才能运行

    release版本: 正式发布时使用

    debug版本: 调试阶段使用

    学习侯老师的<<深入浅出MFC>>时,第三章的Frame1程序,开始新建Win32 一个空的Console Application,然后把书中的代码如实写上去,编译错误如下:

    my.obj : error LNK2001: unresolved external symbol "class CWinApp * __cdecl AfxGetApp(void)" (?AfxGetApp@@YAPAVCWinApp@@XZ

    导致原因是:未将MFC.CPP加到工程中去。

  • 相关阅读:
    XML错误信息Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-4.0.xsd). For more information, right click on the message in the Problems View ...
    Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to 2.3.
    maven创建web报错Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins:maven-compiler-plugin:maven-compiler-plugin:3.5.1:runtime Cause: error in opening zip file
    AJAX跨域
    JavaWeb学习总结(转载)
    JDBC学习笔记
    Java动态代理之JDK实现和CGlib实现
    (转)看懂UML类图
    spring boot配置使用fastjson
    python3下django连接mysql数据库
  • 原文地址:https://www.cnblogs.com/xiaocai0923/p/2218831.html
Copyright © 2011-2022 走看看