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

编译RISC-V GNU工具链时configure文件找不到的问题及相关疑问

编译RISC-V GNU工具链时configure文件找不到的问题及相关疑问

看来你在Ubuntu 22.04上搭建xv6-riscv所需的RISC-V GNU工具链时碰到了不少困惑,我来帮你一步步理清问题根源和解决办法。

首先,先解开你对Makefile序列的疑惑——你误解了$<这个变量的含义!

在Makefile里,$<是一个自动变量,它代表当前规则的第一个依赖目标。看你提到的Makefile规则:

rm -rf $@ $(notdir $@)
mkdir $(notdir $@)
cd $(notdir $@) && $</configure \
# some args

这里的$<并不是指向当前刚创建的空目录,而是指向这个规则依赖的newlib目录路径(比如你的/mnt/c/Users/vrait/Documents/Code/OperatingSystems/riscv-gnu-toolchain/newlib)。所以$</configure实际是调用newlib目录下的configure脚本,而不是当前build目录里的——这是标准的out-of-source构建方式:在单独的build目录里运行源代码目录的configure,把编译产物都放在build目录,避免污染源码。

你遇到configure: not found错误的核心原因

这个错误本质是newlib目录里根本没有configure文件!为什么会这样?因为riscv-gnu-toolchain仓库使用了Git子模块来管理newlib、binutils这些依赖组件,如果你克隆仓库的时候没加--recursive参数,或者克隆后没有初始化子模块,那newlib、binutils这些子目录都是空的,自然找不到configure脚本。

你可以验证一下:去/mnt/c/Users/vrait/Documents/Code/OperatingSystems/riscv-gnu-toolchain/newlib目录下看看,是不是空的?如果是,那就是子模块没初始化的问题。

正确的修复步骤

  1. 先进入riscv-gnu-toolchain的根目录:
    cd /mnt/c/Users/vrait/Documents/Code/OperatingSystems/riscv-gnu-toolchain
    
  2. 初始化并拉取所有子模块内容:
    git submodule update --init --recursive
    
    这个命令会把newlib、binutils等所有依赖的子模块代码都拉取下来。
  3. 清理之前错误的构建产物:
    sudo make clean
    
  4. 重新运行编译:
    sudo make
    

为什么你改/configure为/../configure后会卡住?

你修改后调用的是工具链根目录的configure(如果有的话),但这个configure是用来整体配置工具链的,而Makefile里每个组件(newlib、binutils)需要调用各自子目录下的configure脚本。你强行改了路径,导致后续构建逻辑完全混乱,自然就会卡住没有输出了。

备注:内容来源于stack exchange,提问作者VanceR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:54:29