error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er

本文介绍了在使用OpenGL进行三维图形开发过程中遇到的glut.h链接错误问题,并提供了一个简单的解决方案,即通过定义GLUT_DISABLE_ATEXIT_HACK来避免atexit workaround导致的未解析外部符号错误。
http://blog.youkuaiyun.com/sosidami/article/details/5408576

  1. opengl的高级菜鸟问题  
  2.  看了一本书《OpenGL三维图形系统开发与应用技术》,但是,其中涉及到glut.h文件的函数无法正常连接,典型的错误如下:  
  3. ------ 已启动生成: 项目: gears, 配置: Debug Win32 ------  
  4. 1>正在链接...  
  5. 1>GEARS.obj : error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用  
  6. 1>GEARS.obj : error LNK2019: 无法解析的外部符号 ___glutCreateWindowWithExit@8,该符号在函数 _glutCreateWindow_ATEXIT_HACK@4 中被引用  
  7. 1>./Debug/gears.exe : fatal error LNK1120: 2 个无法解析的外部命令  
  8. 1>生成日志保存在“file://c:/vcprog/OpenGL/book/Chapter03/GEARS/Debug/BuildLog.htm”  
  9. 1>gears - 3 个错误,0 个警告  
  10. ========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========  
  11.    
  12. 反复思考,也没有找到答案,网上也有说类似问题的,但是竟然没有这方面的解决方案,今天看了glut.h的文件内容,glut.h的注释竟然就写着如下内容:  
  13.    Note that the __glut*WithExit routines should NEVER be called directly.  
  14.    To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK.   
  15. 于是,在#include <GL/glut.h>前面加上了一句:  
  16. #define GLUT_DISABLE_ATEXIT_HACK  
  17.    
  18. 再次链接,一切正常。  
  19. 这个问题几乎困扰了我三个月,今天终于解决了,路就在脚下,痛快!!!!!!!!!!!  
### 链接错误 `LNK2019`:无法解析外部符号 `_HidD_SetFeature@12` 的解决方法 在使用 `HidD_SetFeature` 函数时,若出现链接错误 `error LNK2019: 无法解析外部符号 _HidD_SetFeature@12`,则表明链接器无法找到该函数的实现。此问题通常与未正确链接 HID 系统库有关。 `HidD_SetFeature` 是 Windows HID 驱动接口的一部分,定义在 `hidsdi.h` 头文件中,其实现则位于 `hid.lib` 静态库文件中。若项目未正确链接 `hid.lib`,则会导致链接器无法解析函数符号,从而报出 `LNK2019` 错误 [^2]。 为解决此问题,需确保以下配置正确: #### 包含头文件并链接 `hid.lib` 在源代码中包含以下头文件: ```c #include <windows.h> #include <hidsdi.h> ``` 并在项目设置中链接 `hid.lib`。在 Visual Studio 中,可通过以下方式添加链接库: - 右键点击项目 → 属性 → 链接器 → 输入 → 附加依赖项 - 添加 `hid.lib` 到依赖项列表中 或者在代码中使用编译器指令显式链接: ```c #pragma comment(lib, "hid.lib") ``` 此步骤可确保链接器在编译时正确解析 `_HidD_SetFeature@12` 符号 [^2]。 #### 检查 Windows SDK 版本和平台配置 若链接器仍无法解析符号,可能与当前使用的 Windows SDK 版本有关。某些旧版本的 SDK 可能未包含完整的 HID 支持。建议更新至最新版本的 Windows SDK,并确保项目配置使用正确的 SDK 版本 [^2]。 此外,检查项目的目标平台是否一致。若项目使用 x64 构建配置,但链接的库为 Win32 版本,则可能导致符号解析失败。应确保构建平台与库文件的架构一致 [^5]。 #### 示例代码 以下为使用 `HidD_SetFeature` 的完整示例,确保链接 `hid.lib` 后可正常编译运行: ```c #include <windows.h> #include <hidsdi.h> #include <stdio.h> #pragma comment(lib, "hid.lib") int main() { HANDLE hDevice = CreateFile(L"\\\\.\\HID#VID_XXXX&PID_XXXX#0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDevice == INVALID_HANDLE_VALUE) { printf("Failed to open device\n"); return -1; } UCHAR buffer[65] = {0}; buffer[0] = 0x01; // Report ID buffer[1] = 0xA5; // Data if (HidD_SetFeature(hDevice, buffer, sizeof(buffer))) { printf("Feature report sent successfully\n"); } else { printf("Failed to send feature report\n"); } CloseHandle(hDevice); return 0; } ``` 通过上述配置,可有效解决 `LNK2019` 错误并确保 `HidD_SetFeature` 正常调用 [^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值