无法解析的外部符号 WdfFunctions,无法解析的外部符号 __RTC_Shutdown

本文详细介绍了在使用Visual Studio 2017开发环境下,解决KMDF驱动开发中出现的问题,包括设置KMDF_VERSION_MAJOR版本属性及警告等级,以及解决RTC运行时检测和安全检测配置问题的具体方法。

VS2017遇到该问题

WDF问题解决方法:

KMDF_VERSION_MAJOR=1//该问题设置属性中的driver settings设置KMDF_VERSION_MAJOR为1.25,项目属性中设置
MSC_WARNING_LEVEL=/W4 /WX//设置属性警告等级为4

RTC问题解决方法:

->基本运行时检测(Basic Runtime Check)改为默认(Default);
->安全检测(Buffer Security Check)改为否(No);

非常好的问题! 你遇到的链接错误: ``` error LNK2001: 无法解析外部符号 __fltused ``` 是与 **浮点支持相关的静态链接器符号**,通常出现在你不使用标准 CRT(C 运行时)启动代码的情况下,比如你在开发驱动、内核模式程序、或某些嵌入式环境。 --- ## ✅ 问题原因分析 ### `__fltused` 是什么? - `__fltused` 是 Microsoft 编译器引入的一个 **标记性符号**。 - 当你的代码中使用了浮点数运算(如 `float`, `double`),编译器会自动引用这个符号。 - 它的作用是告诉链接器:**“我需要加载浮点支持库”**。 - 如果你没有使用任何 CRT 启动代码(例如在驱动开发中使用 `/NODEFAULTLIB` 或者裸机程序),链接器就找不到它,从而报错。 --- ## ✅ 解决方法 ### ✅ 方法一:手动定义 `__fltused` 这是最直接的方式。只需在你的 `.c` 文件中添加如下代码即可: ```c // 强制启用浮点支持 int _fltused = 0x9875; ``` 或者更准确地写为: ```c #pragma comment(lib, "libcntpr.lib") // 可选:某些环境下需要这个库 extern int _fltused; int _fltused = 0x9875; ``` > `0x9875` 是微软约定的 magic number,用于表示启用浮点支持。 --- ### ✅ 方法二:如果你不使用浮点运算 如果你确认自己完全没用到浮点数(`float` / `double`),可以尝试禁用浮点支持: #### 在 Visual Studio 中设置: - 打开项目属性 -> C/C++ -> Code Generation - 设置 **Enable Floating Point Emulation** 为 **0 (Not Using Floating Point)** #### 或者在命令行加上编译选项: ```bash /fp:except- ``` --- ## ✅ 示例代码(完整) ```c #include <windows.h> // 手动定义 _fltused int _fltused = 0x9875; void TestFloat() { float a = 3.14f; float b = 2.71f; float c = a + b; printf("Result: %f\n", c); } int main() { TestFloat(); return 0; } ``` --- ## ✅ 其他相关错误提示 如果你还看到以下链接错误,也可能是浮点相关的问题: - `__ftol2` - `__t_sincos` - `__CxxFrameHandler3` - `__RTC_Check_1` 这些都可以通过引入合适的运行时库或禁用相关特性来解决。 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值