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

启用multilib及多语言支持编译GCC-15.1.0失败求助

GCC-15.1.0编译Go组件时_SYS_futex和_SYS_timer_settime未定义问题解决

问题概述

编译启用multilib且支持C、C++、D、Fortran、Go、COBOL、Modula-2的GCC-15.1.0源码时,Go语言运行时编译环节报错,系统无法识别_SYS_futex和_SYS_timer_settime常量。使用make -j$( ( nproc + 1 ))命令编译,预期ARM、AArch64、RISCV64交叉编译选项失败时主构建仍能完成,但实际因上述错误中断。

具体错误信息

../../.././libgo/go/runtime/os_linux.go:36:30: error: reference to undefined name "_SYS_futex"

return int32(syscall(_SYS_futex, uintptr(addr), uintptr(op), uintptr(val), uintptr(ts) uintptr(addr2), uintptr(val3)))

return int32(syscall(_SYS_timer_settime, uintptr(timerid), uintptr(flags), uintptr(unsafe.Pointer(new)), uintptr(unsafe.Pointer(old)), 0, 0))

解决步骤

  • 检查系统头文件:查看/usr/include/bits/syscall.h或/usr/include/linux/syscalls.h,确认是否存在_SYS_futex和_SYS_timer_settime定义。若缺失,更新glibc-devel包以获取完整的系统调用常量定义。
  • 修正configure配置:编译GCC时添加--build=x86_64-linux-gnu明确主机架构,避免交叉编译逻辑干扰主构建;若不需要交叉编译ARM/AArch64/RISCV64,直接移除这些目标的配置,优先完成主架构编译。
  • 手动传入常量定义:在编译libgo阶段,为gccgo添加编译选项手动指定常量值,例如:
    make CFLAGS_FOR_TARGET="-D_SYS_futex=202 -D_SYS_timer_settime=223"
    
    注:上述数值为x86_64架构下的典型系统调用号,需根据实际系统调整。
  • 修复libgo源码:修改libgo/go/runtime/os_linux.go,将未定义的常量替换为对应系统调用号,或添加正确的头文件引入逻辑,确保能自动获取这些常量。
  • 分阶段编译:先执行make all-gcc all-target-libgcc完成主GCC工具链编译,再单独处理Go等其他语言组件,避免单个组件失败阻断整个构建流程。

内容的提问来源于stack exchange,提问作者Andrew Kay novaTopFlex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:12:29