Mac Catalina下使用RVM安装Ruby 3.0.x时出现Segmentation fault:11编译错误
问题根因
编译阶段exe/ruby链接环节抛出的Segmentation fault: 11,核心诱因是macOS Catalina配套Xcode 11内置的Clang 11编译器,与Ruby 3.0.0/3.0.1的默认编译选项存在已知兼容缺陷。之前尝试的重装RVM、切换RVM开发分支、调整OpenSSL配置、手动执行官方编译流程等操作,均未覆盖这个编译器兼容问题的根因,因此无法解决报错。
解决操作
- 清理历史编译残留,避免旧缓存干扰
执行命令清空之前半完成编译留下的临时文件:rvm cleanup all rm -rf ~/ruby-3.0* - 调整编译参数绕开Clang 11的代码生成bug
Ruby默认编译开启-O3优化等级,正是这个等级下的Clang代码生成逻辑触发了段错误,安装时手动指定编译参数即可绕过:
若上述命令仍在相同环节报错,切换为单线程编译模式,规避多线程并行编译触发的内存溢出类段错误:rvm install 3.0.0 --CFLAGS="-O2 -fno-stack-protector"rvm install 3.0.0 -j1 --CFLAGS="-O2 -fno-stack-protector" - 手动编译场景适配
若选择手动编译安装,只需在配置环节传入相同的编译参数替换默认配置,无需改动其他流程:./configure CFLAGS="-O2 -fno-stack-protector" make -j1 make install - 安装验证
编译完成后执行ruby -v,正常输出ruby 3.0.0版本信息即代表安装成功,可通过RVM自由切换多Ruby版本环境。
内容的提问来源于stack exchange,提问作者Hadii Varposhti
相关产品推荐
相关产品推荐

