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

交叉编译RISCV64架构Valgrind工具时遇段错误求助

RISC-V64交叉编译Valgrind时ld段错误的解决方案

问题重现

在x86架构的Ubuntu 22.04(内核5.15)宿主机上,编译RISC-V64版本的Valgrind(使用valgrind-riscv64仓库),执行以下命令:

git clone https://github.com/petrpavlu/valgrind-riscv64
./autogenerate.sh
export CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-linux-gnu-
./configure --target=riscv64-unknown-linux-gnu \
            --host=riscv64-unknown-linux-gnu \
            --prefix=/opt/valgrind-riscv64 \
            CFLAGS=-static \
            CC=${CROSS_COMPILE}gcc \
            CPP=${CROSS_COMPILE}cpp \
            CXX=${CROSS_COMPILE}g++ \
            LD=${CROSS_COMPILE}ld \
            AR=${CROSS_COMPILE}ar
make

编译过程中触发错误:

collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped

解决建议

  • 升级RISC-V交叉工具链
    老旧版本的RISC-V ld工具可能存在已知bug,执行${CROSS_COMPILE}ld --version查看当前版本,若版本低于gcc 12.x,建议更新到最新的riscv-gnu-toolchain。可下载官方预编译包替换,或自行编译工具链。
  • 移除静态编译参数
    CFLAGS=-static会强制静态链接,导致ld需要处理大量静态库文件,容易触发内存相关的段错误。去掉该参数后,重新运行configure和make尝试编译。
  • 优化编译并发数与ld参数
    多线程编译可能导致内存占用过载,尝试用make -j$(nproc --ignore=2)控制并发数(根据宿主机CPU核心数调整)。同时给ld添加内存优化参数,修改configure命令如下:
    ./configure --target=riscv64-unknown-linux-gnu \
                --host=riscv64-unknown-linux-gnu \
                --prefix=/opt/valgrind-riscv64 \
                LDFLAGS='--no-keep-memory' \
                CC=${CROSS_COMPILE}gcc \
                CPP=${CROSS_COMPILE}cpp \
                CXX=${CROSS_COMPILE}g++ \
                LD=${CROSS_COMPILE}ld \
                AR=${CROSS_COMPILE}ar
    
  • 拉取仓库最新代码
    进入valgrind-riscv64目录,执行git pull获取最新提交,仓库可能已经修复了编译相关的兼容性问题。

内容的提问来源于stack exchange,提问作者Mirco Mannino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:15