[转]无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用

刚学WinAPI编译遇到不少问题,
LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用 MSVCRTD.lib test。

这个问题表明你新建的是一个main类型函数(控制台程序),而你的程序中有窗口程序,显然是个win32函数,解决方法:项目-属性-链接器-系统-子系统-把控制台该为windows。

以下基本的情况说明:

一,问题描述
error LNK2001: unresolved external symbol [email protected]
debug/main.exe:fatal error LNK 1120:1 unresolved externals
error executing link.exe;

二,产生这个问题可能的原因
1, 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain.

2. 你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。

三, 解决方法
1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS

2.进入project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows.

3.保存设置,Rebuild All.

VS2005中的设置请参考对应项进行设置

四,VS2005中的设置

1.菜单中选择 Project->Properties, 弹出Property Pages窗口

2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.

3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)

4.Rebuild All. Ok ?

测试:(环境:vs2005,编程语言vc)

1.用文本编辑器编写如下代码:

// test.c
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
  MessageBox(NULL, "Hello!", "title", MB_OK);
}

假设把文件包存为test.c.

2.用vs2005建一个Win32 Console Application, 注意在Application Settings设置为Empty project. 然后把test.c添加到工程中去。

3.vs2005 建立的工程默认是支持UNICODE的,我不用这个,所以在菜单中选择 Project->Properties, 弹出Property Pages窗口。在左边栏中依次选择:Configuration Properties->General,然后把右边栏的Character Set 改为Use Multi-Byte Character Set.

4.编译,出现如下错误:

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
C:\test\Debug\test.exe : fatal error LNK1120: 1 unresolved externals

5.按照上述VS2005中的设置方法进行设置,然后再编译,错误消失了吧!

同理,如果你新建的是一个Windows 32程序,但是却使用了控制台程序的入口函数:void main(){ }。可按照下图所示对应修改程序类型。

原文地址:https://www.cnblogs.com/rainbow70626/p/11823720.html

时间: 2024-11-05 21:53:01

[转]无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用的相关文章

无法解析的外部符号 [email&#160;protected],该符号在函数 ___tmainCRTStartup 中被引用

一,问题描述MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 ___tmainCRTStartup 中被引用 Debug\jk.exe : fatal error LNK1120: 1 个无法解析的外部命令 error LNK2001: unresolved external symbol [email protected]在自己创建新工程的时候经常在开始选择win32控制台程序还是win32

error LNK2019: 无法解析的外部符号 [email&#160;protected],该符号在函数 ___tmainCRTStartup 中被引用

产生这个问题的真正原因是C语言运行时找不到适当的程序入口函数,一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2008中新建项目为"win32项目",如果是dos控制台程序,那么main是入口函数,在VS2008中新建项目为"win32控制台应用程序", 而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误,需要修改设置以适应你的需求. windows程序: 1.菜单中选择 Project->Properties,

使用SDL2出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” 时的可能错误记录

这几天在使用SDL2,之前一直都没有错,直到上午把项目搬了个地方.结果一直出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” . 看了网上的方法都说是没有正确定义 main 函数 ,这是SDL2main.lib指定需要的函数.结果我把他定义在了"xx.h"这样的头文件中. 原来我一直没理解头文件和源文件的重要区别.把 main 函数定义在 "xx.cpp" 这样的源文件中就可以正确编译了. 看来还需要再

无法解析的外部符号 _ ,该符号在函数 &quot; __main中被引用 &amp;&amp; This function or variable may be unsafe.

加上winsock2的运行库看看吧,一般不用加的啊 #pragma comment(lib,"Ws2_32.lib") 应该就没有问题了吧^_^ 以下为转载 http://blog.chinaunix.net/uid-20672257-id-2955771.html 1.将过去的工程用VS2010打开的时候.你有可能会遇到一大堆的警告:warning C4996. 比如:warning C4996: 'sprintf': This function or variable may be

error LNK2019: 无法解析的外部符号 [email&#160;protected],该符号在函数 _wmain 中被引用

1>sockett.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _wmain 中被引用 解决方法: 没有加入相应的链接库,winmm.lib.在头文件添加 #pragma comment(lib,"ws2_32.lib") ws2_32.lib文件,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程(否则需要动态载入ws2_32.dll).有时无法直接对头文件进行修改.在引

&lt;转&gt;关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考

错误提示信息摘抄如下: -------------------------------------------------------------------------------------------------- 错误         12     error LNK2019: 无法解析的外部符号 [email protected], 该符号在函数"public: class activemq::util::Guid & __thiscall activemq::util::Gu

error LNK2019: 无法解析的外部符号 __imp_GetUserObjectInformationW,该符号在函数 OPENSSL_isservice 中被引用

错误 18 error LNK2019: 无法解析的外部符号 __imp_GetUserObjectInformationW,该符号在函数 OPENSSL_isservice 中被引用 E:\FileRecv\SimpleAuthenticator(1)\SimpleAuthenticator\SimpleAuthenticator\libeay64.lib(cryptlib.obj) SimpleAuthenticator 错误 19 error LNK2019: 无法解析的外部符号 __im

error LNK2019: 无法解析的外部符号 _acosh,该符号在函数 _acoshFunc 中被引用

编译sqlite3 win32版本时候,遇到如下问题 2>sqlite3secure.obj : error LNK2019: 无法解析的外部符号 _acosh,该符号在函数 _acoshFunc 中被引用2>sqlite3secure.obj : error LNK2019: 无法解析的外部符号 _asinh,该符号在函数 _asinhFunc 中被引用2>sqlite3secure.obj : error LNK2019: 无法解析的外部符号 _atanh,该符号在函数 _atanh

qtmaind.lib(qtmain_win.obj) : error LNK2019: 无法解析的外部符号 __imp_CommandLineToArgvW,该符号在函数 WinMain 中被引用

报错:qtmaind.lib(qtmain_win.obj) : error LNK2019: 无法解析的外部符号 __imp_CommandLineToArgvW,该符号在函数 WinMain 中被引用 原因: 未包含Shell32.lib 解决1: #pragma comment(lib, "Shell32.lib") 解决2: 属性管理器:链接器->输入->附加依赖项->Shell32.lib (在常规中添加好对应附加库目录) 参考:https://blog.c