error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用

时间:2022-10-19 02:04:29
#include <iostream>   
#include <string>   
#include <list>   
using namespace std;   
void PrintIt(list<int> n)   
{   
    for(list<int>::iterator iter=n.begin(); iter!=n.end(); ++iter)   
      cout<<*iter<<" ";//用迭代器进行输出循环    
    }   
int main()   
{   
    list<int> listn1,listn2;   
    //给listn1,listn2初始化    
    listn1.push_back(123);   
    listn1.push_back(0);   
    listn1.push_back(34);   
    listn1.push_back(1123);   
    //now listn1:123,0,34,1123    
    listn2.push_back(100);   
    listn2.push_back(12);   
    //now listn2:12,100   
    listn1.sort();   
    listn2.sort();   
    //给listn1和listn2排序   
    //now listn1:0,34,123,1123         listn2:12,100    
    PrintIt(listn1);   
    cout<<endl;   
    PrintIt(listn2);   
    listn1.merge(listn2);   
    //合并两个排序列表后,listn1:0,12,34,100,123,1123    
    cout<<endl;   
    PrintIt(listn1);   
    cin.get();   
}   

1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
1>E:\VS2010\CPP chengxu\STl\Debug\STl.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>
1>生成失败。

刚刚接触,准备用VS2010调试俩程序 ,老是出错呀!!!TAT!!
上面的错误我按照百度上的一些方法试过,虽不懂原理,但我按照步骤就是解决不了啊。求大神指导!   
不懂的靠复制的人不要瞎搀和哦~
我对winmm.lib啥的都不是很懂,也不知道自己有没有

15 个解决方案

#1


你的入口函数是main,所以你应该建一个控制台项目而不是Win32项目。

#2


能简单多说一点么,要是我搭建的是win32项目  那用什么入口

#3


把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

#4


http://social.msdn.microsoft.com/Forums/zh-CN/b83e4884-9dec-4d67-ab92-90d5b6c8c51c/error-lnk2019-unresolved-external-symbol-winmain16-referenced-in-function-tmaincrtstartup?forum=Vsexpressvc

#5


引用 2 楼 baidu_18466509 的回复:
能简单多说一点么,要是我搭建的是win32项目  那用什么入口


VC左边,解决方案窗口,在项目上点右键,选择属性->配置->链接->系统,将子系统的window设置成console.

如果你VC的菜单是英文的,自己找找,一样的。

#6


引用 3 楼 mujiok2003 的回复:
把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

为什么改个类型就可以了,这两个有什么区别么   你能讲讲么  或是推荐我看看什么书能知道的

#7


引用 6 楼 baidu_18466509 的回复:
Quote: 引用 3 楼 mujiok2003 的回复:

把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

为什么改个类型就可以了,这两个有什么区别么   你能讲讲么  或是推荐我看看什么书能知道的

你写的程序人口是被CRT(c 运行时库)调用的, 不同类型的应用程序, CRT期待不同的函数名,不同的原型。 

学习一下使用VC的工程向导生成, 不要自己事后修改。事后修改比较麻烦而且容易出错。 

#8


引用 2 楼 baidu_18466509 的回复:
能简单多说一点么,要是我搭建的是win32项目  那用什么入口

Win32项目用WinMain

#9


引用 6 楼 baidu_18466509 的回复:
Quote: 引用 3 楼 mujiok2003 的回复:

把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

为什么改个类型就可以了,这两个有什么区别么   你能讲讲么  或是推荐我看看什么书能知道的

Win32项目不为自动为你创建那个黑色的控制台窗口

#10


一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^

#11


weiran2009 非常正确!非常感谢!!!

#12


引用 10 楼 weiran2009 的回复:
一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^


我是在release时出错,把这里写为空就好了

#13


引用 10 楼 weiran2009 的回复:
一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^
谢谢,很棒

#14


引用 10 楼 weiran2009 的回复:
一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^

改了之后又出现无法解析的外部符号 main,该符号在函数 ___tmainCRTStartup 中被引用这个错误

#15


我也是这个问题,不过我确定我的程序是window应用程序,不是控制台程序,感觉可能和win10sdk有关系,可能跳过了mfc,所以选择静态库中使用mfc时会出错,mfc类库难道我没安装?

#1


你的入口函数是main,所以你应该建一个控制台项目而不是Win32项目。

#2


能简单多说一点么,要是我搭建的是win32项目  那用什么入口

#3


把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

#4


http://social.msdn.microsoft.com/Forums/zh-CN/b83e4884-9dec-4d67-ab92-90d5b6c8c51c/error-lnk2019-unresolved-external-symbol-winmain16-referenced-in-function-tmaincrtstartup?forum=Vsexpressvc

#5


引用 2 楼 baidu_18466509 的回复:
能简单多说一点么,要是我搭建的是win32项目  那用什么入口


VC左边,解决方案窗口,在项目上点右键,选择属性->配置->链接->系统,将子系统的window设置成console.

如果你VC的菜单是英文的,自己找找,一样的。

#6


引用 3 楼 mujiok2003 的回复:
把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

为什么改个类型就可以了,这两个有什么区别么   你能讲讲么  或是推荐我看看什么书能知道的

#7


引用 6 楼 baidu_18466509 的回复:
Quote: 引用 3 楼 mujiok2003 的回复:

把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

为什么改个类型就可以了,这两个有什么区别么   你能讲讲么  或是推荐我看看什么书能知道的

你写的程序人口是被CRT(c 运行时库)调用的, 不同类型的应用程序, CRT期待不同的函数名,不同的原型。 

学习一下使用VC的工程向导生成, 不要自己事后修改。事后修改比较麻烦而且容易出错。 

#8


引用 2 楼 baidu_18466509 的回复:
能简单多说一点么,要是我搭建的是win32项目  那用什么入口

Win32项目用WinMain

#9


引用 6 楼 baidu_18466509 的回复:
Quote: 引用 3 楼 mujiok2003 的回复:

把应用程序类型改为控制台类型。 

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.

为什么改个类型就可以了,这两个有什么区别么   你能讲讲么  或是推荐我看看什么书能知道的

Win32项目不为自动为你创建那个黑色的控制台窗口

#10


一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^

#11


weiran2009 非常正确!非常感谢!!!

#12


引用 10 楼 weiran2009 的回复:
一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^


我是在release时出错,把这里写为空就好了

#13


引用 10 楼 weiran2009 的回复:
一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^
谢谢,很棒

#14


引用 10 楼 weiran2009 的回复:
一种解决方案:

[XXX属性] -> [配置属性] -> [链接器]-> [高级],在[入口点]里写入mainCRTStartup,确定即可

我出现的问题,是用这种方法解决的,有用的点个赞^^

改了之后又出现无法解析的外部符号 main,该符号在函数 ___tmainCRTStartup 中被引用这个错误

#15


我也是这个问题,不过我确定我的程序是window应用程序,不是控制台程序,感觉可能和win10sdk有关系,可能跳过了mfc,所以选择静态库中使用mfc时会出错,mfc类库难道我没安装?