从源码编译QEMU时遇USERFAULTFD_IOC_NEW未定义错误求助
问题原因
Ubuntu 22.04.2自带的系统内核头文件版本偏低,/usr/include/linux/userfaultfd.h里没有定义USERFAULTFD_IOC_NEW宏;而你用的QEMU源码自带的linux-headers/linux/userfaultfd.h虽然有这个宏,但之前的configure命令没把这个路径正确加入编译阶段的头文件搜索列表——那个路径被错误地当成了链接阶段的输入,所以编译时编译器还是优先调用系统头文件,导致宏未定义的报错。
解决步骤
- 重新执行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" - 清理残留编译文件,重新编译
先清理之前的编译产物,避免旧的Makefile干扰:make clean make -j$(nproc) make install - 可选:验证头文件路径是否生效
用预编译命令检查编译器是否能正确找到自带的头文件中的宏:
如果输出包含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
相关产品推荐
相关产品推荐

