error LNK2019: 无法解析的外部符号 ***,该符号在函数 "***"中被引用 || 错误:无法打开导入的***.lib 文件

本文解决了在编译过程中遇到的多个链接器错误,包括LNK2019(无法解析的外部符号)和LNK1120(无法解析的外部命令)。问题出现在使用VS2010编译时,通过检查并调整项目设置中的附加依赖项来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误1:

1>  正在生成代码...
1>SteeringWheel.obj : error LNK2019: 无法解析的外部符号 _HidP_GetCaps@8,该符号在函数 "void __cdecl steeringWheel(void)" (?steeringWheel@@YAXXZ) 中被引用
1>SteeringWheel.obj : error LNK2019: 无法解析的外部符号 _HidD_GetPreparsedData@8,该符号在函数 "void __cdecl steeringWheel(void)" (?steeringWheel@@YAXXZ) 中被引用
1>SteeringWheel.obj : error LNK2019: 无法解析的外部符号 _HidD_GetProductString@12,该符号在函数 "void __cdecl steeringWheel(void)" (?steeringWheel@@YAXXZ) 中被引用
1>SteeringWheel.obj : error LNK2019: 无法解析的外部符号 _HidD_GetManufacturerString@12,该符号在函数 "void __cdecl steeringWheel(void)" (?steeringWheel@@YAXXZ) 中被引用
1>SteeringWheel.obj : error LNK2019: 无法解析的外部符号 _HidD_GetAttributes@8,该符号在函数 "void __cdecl steeringWheel(void)" (?steeringWheel@@YAXXZ) 中被引用
1>SteeringWheel.obj : error LNK2019: 无法解析的外部符号 _HidD_GetHidGuid@4,该符号在函数 "void __cdecl steeringWheel(void)" (?steeringWheel@@YAXXZ) 中被引用
1>E:\project资料\OSG虚拟驾驶仿真_项目源码\Debug\MyOSGProject.exe : fatal error LNK1120: 6 个无法解析的外部命令


解决:

osg的lib 文件下没有导入相应的库文件,抑或是导入了但没在vs中调出来(属性——》附加依赖项)。

ps:vs2010

------------------------------------------------------------------------------------------------------------------------------------------------------------

错误2:

无法打开导入的***.lib 文件


解决:

在vs下引用的库的路径不对

### 关于驱动开发中的 LNK2019 错误 在驱动程序开发过程中遇到 `LNK2019` 错误通常是因为链接器无法解析某些外部符号。具体到此案例中,错误提示表明未解析外部符号为 `__imp____stdio_common_vsscanf` 和 `__stdio_common_vsprintf`,这些函数与标准中的输入/输出操作有关。 #### 原因分析 此类问题的主要原因可能包括以下几个方面: - 缺少必要的运行时支持文件[^1]。 - 使用的标准 C 版本不兼容当前编译环境或目标平台的要求。 - 配置选项设置不当,例如缺少特定的链接标志或者选择了错误的目标架构。 #### 解决方法 以下是几种常见的解决方案: ##### 方法一:更新工具链和 SDK 版本 确保使用的 Microsoft Visual Studio 或其他构建工具是最新的,并安装最新版 Windows Driver Kit (WDK)。旧版本可能存在缺失的功能实现,升级可以提供更全面的支持。 ##### 方法二:调整项目属性配置 检查项目的 **C/C++ -> Code Generation** 设置项下的 “Runtime Library”,将其改为 `/MTd`(多线程调试静态链接)或其他适合的形式来匹配所需的 CRT 实现方式。另外,在 Linker 的 Input 属性页里确认已加入所有必需的依赖 DLL 导入名称列表。 ##### 方法三:手动定义替代宏 如果确实需要保留现有编译参数而又不想更改全局设定,则可以通过预处理器指令重新定向调用路径至自定义实现代替品上。下面展示了一个简单的例子用于替换掉有问题的部分功能: ```c #include <stdarg.h> #include <string.h> // 自己编写一个简易版的 vsnprintf 函数作为备选方案 int my_vsnprintf(char *str, size_t size, const char *format, va_list ap) { int result; if (!size) return 0; // 如果缓冲区大小为零则返回成功但不做任何事情 result = _vscprintf(format, ap); // 获取所需最小空间长度 if(result >= (int)size){ memset(str,'\0',sizeof(*str)*size); return -1;// 表明溢出了给定的空间范围 } vsprintf_s(str,size, format,ap ); str[size -1]='\0';// 确保字符串结尾正确标记结束符 return strlen(str); } #define vsnprintf my_vsnprintf ``` 通过上述代码片段,我们创建了自己的 `my_vsnprintf()` 来规避原始接口带来的麻烦。注意这里仅作为一个临时措施演示用途,请依据实际需求评估其适用性和安全性后再决定是否采用这种方法。 --- ### 总结 针对 `LNK2019` 类型的问题,建议优先考虑同步最新的软件包资源以及合理安排工程选项;当常规手段难以奏效时再尝试局部修正策略如重写部分核心逻辑等。务必保持警惕避免引入额外风险因素影响整体稳定性表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值