vs2017 windows编程时出现 错误 LNK2019 无法解析的外部符号 _main,该符号在函数"..."中被引用

 

今天第一次接触Windows编程 于是用visual studio 2017写了个简单的程序(代码如下),

#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	MessageBox(NULL, TEXT("这是我第一个Windows编程程序"),TEXT("打招呼"), MB_CANCELTRYCONTINUE);
	return 0;
}

 

结果出现如下的错误:

严重性 代码 说明 项目 文件 行 禁止显示状态

错误 LNK2019 无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用 Project6 C:\Users\11958\source\repos\Project6\Project6\MSVCRTD.lib(exe_main.obj) 1 

 

解决办法如下:

 

 

step1:打开项目属性

step2:打开属性页的“系统”-“子系统”-选择“WINDOWS”

 

(如果对你有帮助的话麻烦点个赞哟~谢谢♪(・ω・)ノ)

后记

《windows核心编程》第五版的第四章进程有讲述该问题的发生的原因和解决办法,感兴趣的同学可以自己去看看~

<think>我们在处理OpenGL编程中遇到的链接错误LNK2019。根据引用信息,错误涉及无法解析外部符号如__imp__glClear@4或_gladLoadGLLoader等。 这些错误通常是由于链接器找不到OpenGL函数的实现导致的。在Windows平台上,OpenGL函数在运行由显卡驱动程序提供,但开发需要链接到库文件。 观察引用信息: [^1]和[^3]提到错误LNK2019: 无法解析外部符号 __imp__glClear@4,这通常与传统的OpenGL库(opengl32.lib)链接问题有关。 [^2]提到错误LNK2019: 无法解析外部符号 _gladLoadGLLoader,这通常是因为没有将glad.c(或glad.cpp)源文件加入项目。 因此,解决这类问题通常有两个方向: 1. 确保正确链接OpenGL库(如opengl32.lib)。 2. 如果使用glad等加载器,确保加载器的源文件被编译并链接。 具体步骤: 步骤1:检查OpenGL库链接 对于传统的OpenGL固定管线函数(如glClear),需要链接opengl32.lib(Windows SDK自带)。 在Visual Studio中添加链接库的方法: - 打开项目属性 -> 链接器 -> 输入 -> 附加依赖项,添加opengl32.lib。 - 或者使用代码中添加指令(仅适用于支持该指令的编译器): #pragma comment(lib, &quot;opengl32.lib&quot;) 步骤2:如果使用glad或其他OpenGL加载库(用于加载扩展函数) - 确保你已经将glad.c(或glad.cpp)文件添加到项目中,这样它会被编译并链接。 - 如果没有添加,请从glad生成器网站(https://glad.dav1d.de/)下载对应版本的glad源文件,并将glad.c文件添加到项目源文件中。 步骤3:检查头文件包含 - 确保正确包含了OpenGL头文件,例如: #include <glad/glad.h> 或者对于旧版: #include <GL/gl.h> 注意:glad.h通常需要在其他OpenGL头文件(如GLFW的)之前包含。 步骤4:检查函数声明和调用是否匹配 - 确保你调用的函数与头文件中的声明一致(例如,glClear在glad中可能通过宏映射到glad_glClear,但通常使用一致的命名)。 步骤5:清理并重新生成 - 有链接错误是由于生成过程中的中间文件不一致导致的,尝试清理解决方案并重新生成。 根据引用[^2]的解决办法,将glad.c文件添加到项目是解决glad相关链接错误的有效方法。 因此,针对用户的问题(错误 LNK2019 无法解析外部符号 __imp_glClear 在函数 main引用),我们给出以下解决方案: 1. 链接opengl32.lib:在项目属性中添加opengl32.lib到附加依赖项。 2. 如果使用了glad,确保glad.c文件已添加到项目中。 注意:如果同出现多个符号无法解析,且其中包含glad相关的符号,那么首先应该解决glad的链接问题(即添加glad.c)。因为glad加载器会负责加载包括glClear在内的所有OpenGL函数,此可能不需要再链接opengl32.lib(但通常glad内部会用到opengl32.lib,所以建议仍然链接)。 如果问题仍然存在,请检查以下几个方面: - 确认项目设置中是否选择了正确的平台(例如x64还是x86,与库的版本匹配)。 - 检查glad生成的版本是否与OpenGL上下文匹配(例如,如果你创建的是OpenGL 3.3上下文,那么glad生成也要选择3.3)。 相关问题: 1. 如何正确设置Visual Studio项目以使用OpenGL? 2. 如何使用glad加载OpenGL函数? 3.Windows上开发OpenGL应用程序需要哪些库? 4. 链接器错误LNK2019通常有哪些解决方法? 5. 如何区分传统OpenGL函数和扩展函数在链接的处理? </think>### 解决 OpenGL 链接错误 LNK2019 无法解析外部符号 __imp_glClear 的方法 #### 1. **添加 OpenGL 库链接(关键步骤)** 错误 `LNK2019: __imp_glClear` 表明链接器找不到 OpenGL 函数的实现。需要手动链接 Windows 的 OpenGL 库: - **Visual Studio 操作**: 右键项目 → 属性 → 链接器 → 输入 → 附加依赖项 → 添加 `opengl32.lib` - **代码添加**(替代方案): ```cpp #pragma comment(lib, &quot;opengl32.lib&quot;) ``` 此库包含 `glClear` 等基础函数的实现[^1][^3]。 #### 2. **检查 GLAD 初始化(若使用加载器)** 若错误涉及 `gladLoadGLLoader`(如引用[^2]): - 确保将 **glad.c 文件加入项目**(右键源文件 → 添加现有项)。 - 验证初始化代码: ```cpp if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << &quot;Failed to initialize GLAD&quot; << std::endl; return -1; } ``` #### 3. **验证头文件包含顺序** 头文件顺序错误会导致函数声明失效: ```cpp #include <glad/glad.h> // 必须先于 GLFW #include <GLFW/glfw3.h> ``` #### 4. **清理并重新生成项目** - 删除 `build/` 或 `Debug/`、`Release/` 文件夹 - 在 VS 中选择:生成 → 重新生成解决方案 #### 5. **检查开发环境配置** - **GLFW 库链接**:确保已添加 `glfw3.lib`(方法同 `opengl32.lib`) - **库文件路径**:属性 → 链接器 → 常规 → 附加库目录 → 添加 GLFW 库路径 - **目标平台匹配**:x86 项目需链接 x86 库,x64 项目需链接 x64 库 > ⚠️ **常见误区**: > - `__imp_glClear` 错误与 `glad.c` 无关(该符号由 `opengl32.lib` 提供) > - 若同出现 `glad_glClear` 错误,则需添加 `glad.c` 文件[^2] ### 相关问题 1. 如何在 CMake 项目中正确链接 OpenGL 库? 2. GLAD 与 GLEW 加载 OpenGL 函数的区别是什么? 3. 为什么 GLFW 初始化后仍报错 `LNK2019`? 4. 如何验证 OpenGL 函数是否加载成功? 5. 跨平台 OpenGL 开发如何处理链接差异(Windows/Linux/macOS)? [^1]: 引用自站内关于 `__imp_glClear` 链接错误的描述 [^2]: 引用自站内关于 `gladLoadGLLoader` 的解决方案 [^3]: 引用自站内关于 `__imp__glClear@4` 在 `display()` 中的错误报告
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值