You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译含<linux/nvme.h>的NVME工具报错:文件不存在,求正确解决方案

关于<linux/nvme.h>找不到的问题及正确使用方法

为什么<linux/nvme.h>不在/usr/include目录

  • <linux/nvme.h>是内核态专属头文件,属于内核源码的一部分,并非用户空间程序的标准头文件。/usr/include下存放的是用户态程序可直接调用的标准库、用户态API头文件,内核头文件默认不会被安装到这个路径。
  • 内核头文件的定义是为内核态代码设计的,包含大量内核内部依赖的结构体、宏,直接在用户态程序中引用会引发用户态与内核态的类型定义冲突,这也是你手动添加-I参数后编译混乱的核心原因。

正确的使用方式

方法一:使用libnvme库(推荐)

libnvme是官方提供的用户态NVMe工具库,专门封装了NVMe操作的用户态API,完全替代直接引用内核头文件的需求:

  • 安装开发包(以Debian/Ubuntu为例):
    sudo apt install libnvme-dev
    
  • 编译时链接库:
    gcc your_program.c -o your_program -lnvme
    
  • 代码中引用<libnvme.h>,它会提供你需要的NVMe命令结构体、宏定义,且完全适配用户态环境,避免内核头文件的兼容性问题。

方法二:使用用户态兼容的内核头文件(仅特殊场景)

如果必须直接使用内核nvme.h的定义,需通过规范方式获取用户态兼容的内核头文件路径:

  • 先安装linux-libc-dev包(提供用户态可用的内核头文件子集):
    sudo apt install linux-libc-dev
    
  • 编译时借助pkg-config获取正确的头文件路径,避免硬编码:
    gcc your_program.c -o your_program $(pkg-config --cflags linux)
    
  • 注意:这种方式仍可能出现用户态与内核态的定义冲突,仅建议在无法使用libnvme的特殊场景下尝试。

内容的提问来源于stack exchange,提问作者S.G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:22:40