警告被视为错误 - 未生成“object“文件

204 篇文章 ¥99.90 ¥299.90
本文介绍了编译器将警告视为错误导致未生成目标文件的问题,详细解析了错误原因,包括编译选项"-Werror"的启用。提供了查找警告原因、禁用-Werror选项或针对特定警告进行处理的解决策略,旨在帮助开发者确保代码质量和可靠性。

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

警告被视为错误 - 未生成"object"文件

在软件开发过程中,编译器通常会生成警告信息,以提醒开发人员潜在的问题或不规范的代码。然而,有时候警告信息被设置为错误,这意味着编译器将警告视为严重问题,不会生成目标文件(object file)。本文将详细介绍这个错误的原因以及可能的解决方法。

当编译器将警告视为错误时,通常会出现类似于"错误 C2220: 警告被视为错误 - 没有生成’object’文件"的错误消息。这意味着编译器遇到了一个警告,但由于警告被视为错误,编译过程被中断,导致没有生成目标文件。

这种情况通常发生在编译器的编译选项中启用了"-Werror"或类似的选项。这样的选项会将所有警告视为错误,强制开发人员解决所有警告,以确保代码的质量和可靠性。但有时候,由于警告信息的轻微性质或其他原因,将警告视为错误可能并不理想。

要解决这个问题,有几种方法可以尝试。

  1. 查找警告的原因:首先,需要仔细阅读错误消息中提供的警告编号和描述,确定造成警告的具体原因。这可能涉及到检查代码中的语法错误、潜在的内存问题、未使用的变量等等。通过理解警告的来源,可以采取相应的措施来解决问题。

  2. 禁用"-Werror"选项:如果你对警告信息

,从环境搭建到编写并测试HelloWDK驱动程序。首先介绍如何安装WDK,然后讲解如何在VS2019中创建和配置驱动项目,解决编译错误。最后,指导如何在虚拟机上测试驱动,包括启用驱动签名测试模式,安装并查看驱动运行效果和日志输出。摘要由优快云通过智能技术生成驱动的开发对于初学者来说是不友好的,我们不知道怎么入手,从哪里入门。对于初学者来说束手无策,特别是碰到一个很简单的问题,都不知道怎么解决,这一系列的教程,就是用来排除这些障碍。大部分的驱动开发教程都会先给我们把文档和demo给我们贴出来:Windows驱动程序入门: Windows 驱动程序入门 - Windows drivers | Microsoft DocsGithub: https://github.com/Microsoft/Windows-driver-samples但这对于初学者来说,一开始并没有什么用,因为看不懂。我们还是按照之前有一定的编程基础,来进入驱动的开发。假设大家已经安装了vs2019或者更高版本的vistual studio。先开发一个Hello World的驱动程序,把驱动程序安装到测试机上,看发生了什么。我们先不管里面的逻辑原理是什么,先依葫芦画瓢,整出第一个Hello World的demo。WDK(Windows Driver Kit) 安装安装WDK也是比较简单的事情,在Vistual studio Install上找到Windows Driver Kit ,进行安装,安装完成了以后会出现Windows Driver Kit已经打钩了。编写HelloWDK新建一个工程,选择Empty WDM Driver项目,新建driver.cpp文件,编写如下代码:// driver.cpp#include <ntddk.h>extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject);extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath){ DbgPrint("[GO2CODING_Driver] DriverEntry\n"); NTSTATUS status = STATUS_SUCCESS; pDriverObject->DriverUnload = DriverUnload; return status;}extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject){ DbgPrint("[GO2CODING_Driver] DriverUnload\n"); return;}123456789101112131415161718192021这时候编译会出错,error C2220: 以下警告视为错误warning C4100: “pRegPath”: 引用的形参warning C4100: “pDriverObject”: 引用的形参123我们还需要如下的设置:1.配置属性 - C/C++ -常规 中 将警告视为错误 设置为 否2.配置属性 - Driver Signing - General 中 Sign Mode 设置为 Off。3 .配置属性 -Inf2cat - run Inf2cat 设置为 否。这样编译成功后,生成HelloWDM.inf和HelloWDM.sys文件。第一个demo也就完成了。测试虚拟机在做驱动的时候,并不像以前开发的应用程序那样,最好不要直接在本机上测试,我们需要一台windows 10 的虚拟机,虚拟机的安装方式可以参考相关的教程。我们还需要驱动开发的相关工具,包含DebugView,DriverMonitor,IRPTrace,WinObj,DeviceTree,DiskView,DriverManager,EzDriverInstaller,可以在这里进行下载。放到测试机上。测试机在正常的模式下,是无法安装windows没有签名的驱动,我们需要把测试机变为不需要签名验证。按shift重启测试机。进入这个界面,选择 疑难解答->启动设置->重启。重新进入系统,在如下的页面中按 7 启动windows。重启完后,把编译好的HelloWDK放到测试机上,进入设备管理(电脑右键->管理),添加过时硬件。一路下一步到底,直到出现 从磁盘安装,选择安装的路径到刚才拷贝的路径下。在安装驱动之前,我们先以管理员的身份打开debugview,在Capture选择如下,等待着log的输出。安装驱动,会 出现如下的提示,选择始终安装。提示安装完成。在设备管理上出现了,如下的新设备。同时在debugview下,我们可以看到如下的log。这个log对于我们来说,意义太重大了,说明我们不仅仅把驱动安装成功了,还打印出了日志,简直相当于调试了,我们的心安了不少。HelloWDK.inf的内容如下:;; The Win2K DDK documentation contains an excellent INF reference.;--------- Version Section ---------------------------------------------------[Version]Signature="$CHICAGO$"Provider=Go2Coding_DeviceDriverVer=11/1/2007,3.0.0.3; If device fits one of the standard classes, use the name and GUID here,; otherwise create your own device class and GUID as this example shows.Class=Go2CodingDeviceClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B1}CatalogFile=HelloWDK.cat;--------- SourceDiskNames and SourceDiskFiles Section -----------------------; These sections identify source disks and files for installation. They are; shown here as an example, but commented out.[SourceDisksNames]1 = "HelloWDK",Disk1,,[SourceDisksFiles]HelloWDK.sys = 1,,;--------- ClassInstall/ClassInstall32 Section -------------------------------; Not necessary if using a standard class; 9X Style[ClassInstall]Addreg=Class_AddReg; NT Style[ClassInstall32]Addreg=Class_AddReg[Class_AddReg]HKR,,,,%DeviceClassName%HKR,,Icon,,"-5";--------- DestinationDirs Section -------------------------------------------[DestinationDirs]YouMark_Files_Driver = 10,System32\Drivers;--------- Manufacturer and Models Sections ----------------------------------[Manufacturer]%MfgName%=Mfg0,ntamd64[Mfg0]; PCI hardware Ids use the form; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd;改成你自己的ID%DeviceDesc%=YouMark_DDI, PCI\VEN_9899&DEV_9899;---------- DDInstall Sections -----------------------------------------------; --------- Windows 9X -----------------; Experimentation has shown that DDInstall root names greater than 19 characters; cause problems in Windows 98[Mfg0.ntamd64]%DeviceDesc%=YouMark_DDI, PCI\VEN_9899&DEV_9899[YouMark_DDI]CopyFiles=YouMark_Files_DriverAddReg=YouMark_9X_AddReg[YouMark_9X_AddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,DeviceIoControl.sysHKR, "Parameters", "BreakOnEntry", 0x00010001, 0; --------- Windows NT -----------------[YouMark_DDI.NT]CopyFiles=YouMark_Files_DriverAddReg=YouMark_NT_AddReg[YouMark_DDI.NT.Services]Addservice = HelloWDK, 0x00000002, YouMark_AddService[YouMark_AddService]DisplayName = %SvcDesc%ServiceType = 1 ; SERVICE_KERNEL_DRIVERStartType = 3 ; SERVICE_DEMAND_STARTErrorControl = 1 ; SERVICE_ERROR_NORMALServiceBinary = %10%\System32\Drivers\HelloWDK.sys[YouMark_NT_AddReg]HKLM, "System\CurrentControlSet\Services\HelloWDK\Parameters",\"BreakOnEntry", 0x00010001, 0; --------- Files (common) -------------[YouMark_Files_Driver]HelloWDK.sys;--------- Strings Section ---------------------------------------------------[Strings]ProviderName="Go2Coding."MfgName="Go2Coding Soft"DeviceDesc="Hello World HelloWDK!"DeviceClassName="Go2Coding_Device"SvcDesc="Go2Coding"123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113如果需要 demo的源代码,可以私信我。
最新发布
03-20
### 开发和测试 HelloWDK 驱动程序的流程 #### 工具准备 为了开发 Windows 驱动程序,需要安装以下工具和环境: - **Visual Studio 2019**: 提供集成开发环境 (IDE),用于编写和调试代码[^1]。 - **Windows Driver Kit (WDK)**: 包含开发驱动所需的工具、头文件和库文件[^2]。 #### 安装 Visual Studio 和 WDK 1. 下载并安装 Visual Studio 2019。确保在安装过程中选择“桌面开发 C++”工作负载,并勾选“Windows 驱动程序开发工具包 (WDK)”选项[^4]。 2. 如果已经安装了 Visual Studio 2019,则可以通过“Visual Studio Installer”添加 WDK 组件。 #### 创建驱动项目 1. 打开 Visual Studio 2019 并创建一个新的项目。 2. 在模板列表中选择“Kernel Mode Driver, Empty”,命名为 `HelloWDK`。 3. 添加必要的源代码文件(如 `.c`, `.h`),实现基本功能逻辑。 以下是简单的驱动代码示例: ```c #include <ntddk.h> NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { UNREFERENCED_PARAMETER(DriverObject); UNREFERENCED_PARAMETER(RegistryPath); KdPrint(("Hello, WDK!\n")); return STATUS_SUCCESS; } ``` 此代码会在加载驱动时打印一条消息到调试输出窗口。 #### 编译驱动程序 1. 使用命令提示符启动开发者工具:从开始菜单找到 `Developer Command Prompt for VS 2019` 并打开它[^3]。 2. 切换至项目的根目录,执行构建命令: ```cmd build -ceZ ``` 参数说明: - `-c`: 清理之前的构建结果。 - `-e`: 启用增量编译。 - `-Z`: 显示详细的构建日志。 如果遇到编译错误,请检查以下几点: - 是否正确安装了 WDK 及其依赖项。 -文件路径是否已配置好。 - 构建目标平台是否匹配(如 x86 或 x64)。 #### 设置虚拟机进行测试 1. 安装适用于 Windows 的虚拟化软件(如 VirtualBox 或 VMware Workstation Pro)。 2. 创建一个带有调试支持的操作系统镜像作为测试环境。 3. 配置主机与虚拟机之间的串口连接以便捕获调试信息。 ##### 调试步骤 1. 在 Visual Studio 中设置远程调试会话,指定目标设备为虚拟机实例。 2. 将生成的二进制文件部署到虚拟机上的适当位置。 3. 加载驱动并通过 WinDbg 查看实时日志输出。 通过上述方法可以完成整个开发周期——从初始化开发环境直到验证最终产物的行为表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编码实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值