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

MacOS环境下安装XV6遭遇无限递归编译错误求助

在macOS上编译XV6时遇到无限递归编译错误

操作步骤

  • 克隆mit-pdos的xv6-public代码仓库
  • 执行brew install qemu安装QEMU
  • 通过brew安装i386-elf工具链:
brew tap nativeos/i386-elf-toolchain
brew install nativeos/i386-elf-toolchain/i386-elf-binutils
brew install nativeos/i386-elf-toolchain/i386-elf-gcc
  • 替换适配macOS的Makefile后,执行make qemu clean,触发编译错误:
i386-elf-gcc -fno-pic -std=gnu17 -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -march=i686 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie -no-pie   -c -o sh.o sh.c
sh.c: In function 'runcmd':
sh.c:58:1: error: infinite recursion detected [-Werror=infinite-recursion]
   58 | runcmd(struct cmd *cmd)
      | ^~~~~~
sh.c:89:5: note: recursive call
   89 |     runcmd(rcmd->cmd);
      |     ^~~~~~~~~~~~~~~~~
sh.c:109:7: note: recursive call
  109 |       runcmd(pcmd->left);
      |       ^~~~~~~~~~~~~~~~~~
sh.c:116:7: note: recursive call
  116 |       runcmd(pcmd->right);
      |       ^~~~~~~~~~~~~~~~~~~
sh.c:95:7: note: recursive call
   95 |       runcmd(lcmd->left);
      |       ^~~~~~~~~~~~~~~~~~
sh.c:97:5: note: recursive call
   97 |     runcmd(lcmd->right);
      |     ^~~~~~~~~~~~~~~~~~~
sh.c:127:7: note: recursive call
  127 |       runcmd(bcmd->cmd);
      |       ^~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [sh.o] Error 1

解决方法

这个错误源于新版i386-elf-gcc默认启用-Werror=infinite-recursion规则,将警告直接转为错误,而XV6的runcmd函数本身是合法的递归逻辑(处理不同命令类型时调用自身),并非真正的无限递归。

可以通过以下两种方式解决:

  1. 修改Makefile禁用该警告
    找到Makefile中定义CFLAGS的行,添加-Wno-infinite-recursion参数,示例:

    CFLAGS = -fno-pic -std=gnu17 -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -march=i686 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie -no-pie -Wno-infinite-recursion
    
  2. 给runcmd函数添加前置声明
    在sh.c文件的runcmd函数定义之前,添加函数声明:

    void runcmd(struct cmd *cmd);
    

    帮助编译器明确函数的递归结构,避免误判。

两种方法任选其一即可,推荐第一种,无需修改XV6源码,仅调整编译参数即可。

内容的提问来源于stack exchange,提问作者Ku-hello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:42:42