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

从源码编译QEMU时遇USERFAULTFD_IOC_NEW未定义错误求助

问题原因

Ubuntu 22.04.2自带的系统内核头文件版本偏低,/usr/include/linux/userfaultfd.h里没有定义USERFAULTFD_IOC_NEW宏;而你用的QEMU源码自带的linux-headers/linux/userfaultfd.h虽然有这个宏,但之前的configure命令没把这个路径正确加入编译阶段的头文件搜索列表——那个路径被错误地当成了链接阶段的输入,所以编译时编译器还是优先调用系统头文件,导致宏未定义的报错。

解决步骤
  1. 重新执行configure,手动指定头文件搜索路径
    把QEMU自带的linux-headers路径通过CFLAGS参数传入,确保编译器在编译时优先搜索这个路径的头文件:
    ../configure --prefix=/opt/qemu-jic23 --target-list=i386-softmmu,x86_64-softmmu --enable-libpmem --enable-slirp CFLAGS="-I/mnt/nvme0/home/shs/qemu/linux-headers"
    
  2. 清理残留编译文件,重新编译
    先清理之前的编译产物,避免旧的Makefile干扰:
    make clean
    make -j$(nproc)
    make install
    
  3. 可选:验证头文件路径是否生效
    用预编译命令检查编译器是否能正确找到自带的头文件中的宏:
    gcc -E -I/mnt/nvme0/home/shs/qemu/linux-headers util/userfaultfd.c | grep USERFAULTFD_IOC_NEW
    
    如果输出包含#define USERFAULTFD_IOC_NEW相关内容,说明路径配置成功。

内容的提问来源于stack exchange,提问作者hansen might

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:57:12