IDE环境
VS2017 COMMUNITY
项目属性
发布版本
x86-Debug调试版本-Win32
链接器子系统
控制台(/SUBSYSTEM:CONSOLE)
输出窗口
生成错误
1>---- 已启动生成: 项目: CircleWithConstantMemberFunctions, 配置: Debug Win32 ----
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中被引用
1>E:\我\C++\C++程序\CircleWithConstantMemberFunctions\Debug\CircleWithConstantMemberFunctions.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>已完成生成项目“CircleWithConstantMemberFunctions.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
尝试操作
对于这个生成错误,我尝试搜索到了一些解释及方法,包括但不限于以下几种:
-
error LNK2019: 无法解析的外部符号这个错误,“最根本的原因在于链接过程中没有搜索到程序用到的库文件”。
-
如果是windows程序(Win32 Application),那么WinMain或者wWinmain是入口函数,在VS2017中新建项目为“win32项目”;
如果是dos控制台程序(Win32 console Application),那么main或者wMain是入口函数,在VS2017中新建项目为“win32控制台应用程序”。
若入口函数指定不当,则运行时时找不到配合函数,它就会报告错误。
解决办法:
1.WINDOWS程序:
菜单->项目->属性, 配置属性->链接器->系统, 子系统
子系统的项改为窗口(/SUBSYSTEM:WINDOWS)
2.CONSOLE程序:
菜单->项目->属性, 配置属性->链接器->系统, 子系统
子系统的项改为控制台(/SUBSYSTEM:CONSOLE)
——尝试过前两个方法之后,我发现只要是“新建项目”时正确选择了创建控制台程序还是窗体程序,就不必修改这个子系统变量,因为它总是正确的。
3.“删除**(/subsytem:windows)**开关,让连接程序根据源代码中实现的函数进行正确的操作。”
——尝试这个方法时,我的操作是选择“未设置”,我的理解是不初始化入口函数,经编译后,程序提示错误,错误信息为:
1>LINK : fatal error LNK1561: 必须定义入口点
故,这个方法我不知道该如何实现。 -
新建一个项目,重新编译。
——emmmm -
检查类实现文件(.cpp)中是否有main()函数。
——检查发现果然没有main函数。我在头文件中完成了类的声明,在类实现文件中完成了类实现,而缺少以下任一操作:
a.在类实现文件中添加main函数实现代码;
b.新建一个源文件,将main函数单独列出,从而作为类的目标文件(客户程序)。——我选择将类实现和目标代码分离,故选用了此方法,编译通过,生成成功。
**想来这其实是一个很低级的失误。
**