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

在Arch Linux/Manjaro上用ruby-build安装Ruby 3.1.0失败求助

安装Ruby 3.1.0失败,3.2.0+版本可正常安装

问题详情

在ManjaroLinux 25.0.2 x86_64系统中,使用ruby-build 20250529.1安装Ruby 3.1.0时触发构建失败,报错:

BUILD FAILED (ManjaroLinux 25.0.2 on x86_64 using ruby-build 20250529.1)

Ruby 3.2.0及更高版本可正常安装。错误日志核心内容如下:

./include/ruby/internal/stdbool.h:43:23: error: ‘_Bool’ cannot be defined via ‘typedef’
   43 | typedef unsigned char _Bool;
      |                       ^~~~~
./include/ruby/internal/stdbool.h:43:23: note: ‘_Bool’ is a keyword with ‘-std=c99’ onwards
./include/ruby/internal/stdbool.h:43:1: warning: useless type name in empty declaration
   43 | typedef unsigned char _Bool;
      | ^~~~~~~
In file included from ./include/ruby/backward/2/bool.h:22,
                 from ./include/ruby/defines.h:74,
                 from ./include/ruby/ruby.h:25,
                 from internal.h:28,
                 from compar.c:13:

日志最终提示:

external command failed with status 2

已尝试以下操作但未解决问题:

  • 通过指定OpenSSL 1.1路径安装:
    RUBY_CONFIGURE_OPTS=--with-openssl-dir=/usr/lib/openssl-1.1 asdf install ruby 3.1.0
    
  • 安装ruby-erb包

解决方案

1. 强制使用兼容的C标准编译

错误根源是Ruby 3.1.0的头文件试图定义_Bool类型,但新版本GCC默认启用C99及以上标准,_Bool已成为关键字,无法通过typedef重新定义。可以通过编译参数规避:

方式A:指定C90标准编译

CFLAGS="-std=c90" asdf install ruby 3.1.0

方式B:禁用Ruby的自定义_Bool定义

添加宏定义让Ruby跳过自身的_Bool定义,直接使用系统标准:

CFLAGS="-DRUBY_NO_STD_BOOL" asdf install ruby 3.1.0

2. 使用补丁修复代码冲突

Ruby 3.1.0在新系统环境下的代码冲突可以通过社区补丁解决,你可以查找ruby-build官方仓库中针对Ruby 3.1.0的兼容补丁,通过以下方式指定补丁安装:

RUBY_BUILD_PATCH_URL="/本地补丁路径或可靠补丁地址" asdf install ruby 3.1.0

3. 临时使用旧版GCC编译

如果上述方法无效,可以临时安装旧版GCC(如GCC 11),指定其作为编译工具:

# 先安装GCC 11(以Manjaro为例)
sudo pacman -S gcc11
# 指定GCC 11编译Ruby
CC=gcc-11 asdf install ruby 3.1.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:43:09