error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 "int __cdecl invoke_main(void)”中被引用

 

From:https://blog.csdn.net/u012570056/article/details/74639894

 

 

一,问题描述 

 

MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用
CamShift.exe : fatal error LNK1120: 1 个无法解析的外部命令

error LNK2001: unresolved external symbol _WinMain
debug/main.exe:fatal error LNK 1120:1 unresolved externals 
error executing link.exe;

 

 

二,原因及解决办法 

 

产生这个问题的真正原因是c语言运行时找不到适当的程序入口函数,

一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2017中新建项目为“win32项目”

如果是dos控制台程序,那么main是入口函数,在VS2017中新建项目为“win32控制台应用程序”

而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误。

修改设置适应你的需求
 

 

如果是 windows桌面程序

  • 1. 菜单中选择 项目->属性, 弹出 项目 属性页
  • 2. 在左边栏中依次选择:配置属性 -> C/C++ -> 预处理器,然后在右边栏的 预处理器定义对应的项中删除 _CONSOLE,添加 _WINDOWS
  • 3. 在左边栏中依次选择:配置属性 -> 链接器 -> 系统,然后在右边栏的 子系统 对应的项改为Windows(/SUBSYSTEM:WINDOWS)

error LNK2019: 无法解析的外部符号 WinMain,该符号在函数

error LNK2019: 无法解析的外部符号 WinMain,该符号在函数

 

 

如果是 控制台程序

  • 1. 菜单中选择 项目->属性, 弹出 项目 属性页
  • 2. 在左边栏中依次选择:配置属性 -> C/C++ -> 预处理器,然后在右边栏的 预处理器定义对应的项中删除  _WINDOWS,添加 _CONSOLE
  • 3. 在左边栏中依次选择:配置属性 -> 链接器 -> 系统,然后在右边栏的 子系统 对应的项改为CONSOLE(/SUBSYSTEM:CONSOLE)

 

 

VS2019 需要将项目由 debug 改成 release

error LNK2019: 无法解析的外部符号 WinMain,该符号在函数

 

示例代码:

#include 
LONG WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	WNDCLASS wc;
	HWND hwnd;
	MSG msg;

	wc.style = 0;                       //类样式
	wc.lpfnWndProc = (WNDPROC)WndProc;  //window 程序地址
	wc.cbClsExtra = 0;                  //类  额外的字节
	wc.cbWndExtra = 0;                  //window  额外的字节
	wc.hInstance = hInstance;           //实例句柄 
	wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);  //图标句柄
	wc.hCursor = LoadIcon(NULL, IDC_ARROW);  //鼠标句柄
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 背景颜色
	wc.lpszMenuName = NULL;           //菜单名
	wc.lpszClassName = "MyWndClass";  //WNDCLASS 名

	RegisterClass(&wc);
	hwnd = CreateWindow(
		"MyWndClass",        //WNDCLASS 名
		"SDK_Application",   //window title
		WS_OVERLAPPEDWINDOW, //window style
		CW_USEDEFAULT,       //水平位置
		CW_USEDEFAULT,       //垂直位置
		CW_USEDEFAULT,       //初始化宽度
		CW_USEDEFAULT,       //初始化高度
		HWND_DESKTOP,        //父窗口句柄
		NULL,                //菜单句柄
		hInstance,           //应用程序的 实例 句柄
		NULL                 //window 创建数据
	);

	ShowWindow(hwnd, nShowCmd);
	UpdateWindow(hwnd);

	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		Ellipse(hdc, 0, 0, 200, 100);
		EndPaint(hwnd, &ps);
		return 0;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

 

 

 

 

你可能感兴趣的:(C/C++)