当前位置: 首页 > news >正文

CentOS7源码安装Ruby4.0.1

  官网:Ruby 程序设计语言官方网站

  所有镜像站站点:Mirror Sites | Ruby,中国镜像站:pub/ruby/,我们通过中国镜像站进行源码下载。(不知道是我不稳定,还是它不稳定,反正不行就刷新)

(1).实验环境

  4核8G  CentOS7.9.2009

  配置了阿里云yum源和阿里云epel,关闭防火墙,关闭SELinux。

(2).依赖环境

  1、gcc/gcc-c++

    Ruby 3.x及以上:通常需要 GCC 7.0+ 或更高版本。

    Ruby 2.7 - 2.0GCC 4.8+ 通常足够。但 GCC 4.8 是一个较老的基准线。

    升级gcc具体参考:CentOS7升级gcc/gcc-c++。建议使用yum安装的gcc11,或源码安装的gcc稳定版本(11、12、13),可以直接使用"./configure --prefix=/usr/local/ruby-4.0.1 --disable-install-rdoc"进行配置,不需要指定gcc和g++的地址,也不会在make时遇到下面的错误。

  2、OpenSSL

    请查看当前版本的源码包中ext/openssl/History.md或README,我这里展示一下Ruby4.0.1的OpenSSL版本要求:

image

   OpenSSL的升级请查看:CentOS7升级OpenSSL3.5.4

(2).编译安装

  这里使用了OpenSSL3.5.4、gcc-14.3.0,安装Ruby4.0.1

  1、安装依赖

[root@localhost ~]# yum install -y zlib-devel libyaml-devel openssl-devel libgdbm-devel libxml2-devel libxslt-devel libcurl-devel libicu-devel krb5-devel \logrotate rsync python3-docutils pkgconfig libffi-devel

  2、编译安装

[root@localhost ~]# tar zxvf ruby-4.0.1.tar.gz
[root@localhost ~]# cd ruby-4.0.1
#--disable-install-rdoc在安装 Ruby 时不安装 RDoc 相关的文档文件
#RDoc是 Ruby 的文档生成工具,类似于 Java 中的 Javadoc。它可以从源代码中提取注释并生成格式化的文档。
[root@localhost ruby-4.0.1]# ./configure --prefix=/usr/local/ruby-4.0.1 --disable-install-rdoc
[root@localhost ruby-4.0.1]# echo $?
0
[root@localhost ruby-4.0.1]# make -j$(nproc)
[root@localhost ruby-4.0.1]# echo $?
0
[root@localhost ruby-4.0.1]# make install
[root@localhost ruby-4.0.1]# echo $?
0

(3).使用源码编译的gcc-15.2.0时遇到的错误,记录一下

  这里使用了OpenSSL3.5.4、gcc-15.2.0,安装Ruby4.0.1

#安装依赖
[root@localhost ~]# yum install -y zlib-devel libyaml-devel openssl-devel libgdbm-devel libxml2-devel libxslt-devel libcurl-devel libicu-devel krb5-devel \logrotate rsync python3-docutils pkgconfig libffi-devel
[root@localhost ~]# tar zxvf ruby-4.0.1.tar.gz
[root@localhost ~]# cd ruby-4.0.1
#--disable-install-rdoc在安装 Ruby 时不安装 RDoc 相关的文档文件
#RDoc是 Ruby 的文档生成工具,类似于 Java 中的 Javadoc。它可以从源代码中提取注释并生成格式化的文档。
[root@localhost ruby-4.0.1]# CC=/usr/local/gcc-15.2.0/bin/gcc CXX=/usr/local/gcc-15.2.0/bin/g++ ./configure --prefix=/usr/local/ruby-4.0.1 --disable-install-rdoc
[root@localhost ruby-4.0.1]# echo $?
0
[root@localhost ruby-4.0.1]# make -j$(nproc)
vm.o: In function `vm_call_cfunc_with_frame_':
vm.c:(.text+0x1aad6): undefined reference to `ruby_cmethod__entry_semaphore'
vm.c:(.text+0x1abd2): undefined reference to `ruby_cmethod__return_semaphore'
vm.o: In function `vm_trace_hook.isra.0':
vm.c:(.text+0x1b62f): undefined reference to `ruby_method__entry_semaphore'
vm.c:(.text+0x1b63f): undefined reference to `ruby_method__return_semaphore'
vm.c:(.text+0x1b64a): undefined reference to `ruby_cmethod__entry_semaphore'
vm.c:(.text+0x1b651): undefined reference to `ruby_cmethod__return_semaphore'
vm.o: In function `rb_vm_pop_cfunc_frame':
vm.c:(.text+0x1bc83): undefined reference to `ruby_cmethod__return_semaphore'
vm.c:(.text+0x1bd35): undefined reference to `ruby_cmethod__return_semaphore'
vm.o: In function `hook_before_rewind':
vm.c:(.text+0x1c9b9): undefined reference to `ruby_method__return_semaphore'
vm.o: In function `vm_exec_handle_exception':
vm.c:(.text+0x1d25e): undefined reference to `ruby_cmethod__return_semaphore'
vm.o: In function `vm_call0_body':
vm.c:(.text+0x23d03): undefined reference to `ruby_cmethod__entry_semaphore'
vm.c:(.text+0x23df9): undefined reference to `ruby_cmethod__return_semaphore'
vm.o: In function `vm_opt_duparray_include_p.part.0':
vm.c:(.text+0x27688): undefined reference to `ruby_array__create_semaphore'
vm.o: In function `vm_exec_core':
vm.c:(.text+0x2fcf5): undefined reference to `ruby_hash__create_semaphore'
vm.c:(.text+0x30147): undefined reference to `ruby_hash__create_semaphore'
vm.c:(.text+0x30a22): undefined reference to `ruby_array__create_semaphore'
vm.c:(.text+0x317cd): undefined reference to `ruby_array__create_semaphore'
vm.c:(.text+0x317fc): undefined reference to `ruby_hash__create_semaphore'
vm.o:(.note.stapsdt+0x24): undefined reference to `ruby_cmethod__entry_semaphore'
vm.o:(.note.stapsdt+0x94): undefined reference to `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x104): undefined reference to `ruby_method__return_semaphore'
vm.o:(.note.stapsdt+0x174): undefined reference to `ruby_method__entry_semaphore'
vm.o:(.note.stapsdt+0x1e0): undefined reference to `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x250): undefined reference to `ruby_method__return_semaphore'
vm.o:(.note.stapsdt+0x2c0): undefined reference to `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x330): undefined reference to `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x3a0): undefined reference to `ruby_cmethod__entry_semaphore'
vm.o:(.note.stapsdt+0x410): undefined reference to `ruby_array__create_semaphore'
vm.o:(.note.stapsdt+0x46c): undefined reference to `ruby_hash__create_semaphore'
vm.o:(.note.stapsdt+0x4c8): undefined reference to `ruby_hash__create_semaphore'
vm.o:(.note.stapsdt+0x524): undefined reference to `ruby_array__create_semaphore'
vm.o:(.note.stapsdt+0x580): undefined reference to `ruby_array__create_semaphore'
vm.o:(.note.stapsdt+0x5dc): undefined reference to `ruby_hash__create_semaphore'
collect2: error: ld returned 1 exit status
make: *** [miniruby] Error 1

  这个报错应该是GCC 编译器版本过新(15.2.0)与 Ruby 源码中的某些旧机制(如 SystemTap 探针)不兼容导致的。这些报错的符号是用于性能分析和调试(DTrace/SystemTap)的。如果你不是专门做 Ruby 核心性能分析的开发,完全可以禁用这些功能。在 ./configure 命令中添加 --disable-dtrace 参数,禁用 DTrace/SystemTap 支持。

[root@localhost ruby-4.0.1]# cd ..
[root@localhost ~]# rm -rf ruby-4.0.1
[root@localhost ~]# tar xvf ruby-4.0.1.tar.xz
[root@localhost ~]# cd ruby-4.0.1
[root@localhost ruby-4.0.1]# CC=/usr/local/gcc-15.2.0/bin/gcc CXX=/usr/local/gcc-15.2.0/bin/g++ ./configure --prefix=/usr/local/ruby-4.0.1 \--disable-install-rdoc --disable-dtrace
[root@localhost ruby-4.0.1]# echo $?
0
[root@localhost ruby-4.0.1]# make -j$(nproc)
[root@localhost ruby-4.0.1]# echo $?
0
[root@localhost ruby-4.0.1]# make install
[root@localhost ruby-4.0.1]# echo $?
0

  

http://www.jsqmd.com/news/288812/

相关文章:

  • 2026轻型无人机系统供应商推荐:当空间智能遇见低空未来
  • 辉昂包装定制能否满足个性需求,全国包装厂排名有答案
  • 国外论文参考文献怎么找:实用方法与资源指南
  • 2026年1月焊机厂家推荐排行榜:点焊机/储能式点焊机/伺服铜铝扩散焊机/无痕点焊机/中频滚焊机/健身房焊机/液氮超低温焊机/智能焊机/-180℃焊机/家用焊机,匠心智造,精准焊接解决方案!
  • 2026金融AI营销合规指南原圈科技领衔私有化部署五强榜
  • 2026工业射线/探伤/X光胶片厂家推荐无锡锐视特科技,专业品质保障
  • 直播回顾 | 如何利用AI,快速生成标准草案?
  • 广州职业装定制优质生产商有哪些,尚派服饰值得选吗?
  • Qwen-Image-Edit-2511调优实践:单位成本直降六成
  • 聊聊磷酸铁锂粉末方形摇摆筛,好用的品牌有哪些,方形摇摆筛价格贵不贵?
  • P8339 [AHOI2022] 钥匙
  • 2026年合肥可靠的搬家公司排名,看哪家值得推荐?
  • 2026 年 1 月干燥设备厂家推荐排行榜:真空耙式/喷雾/振动流化床/滚筒刮板/脉冲真空/单锥螺带/闪蒸/气流/盘式干燥机专业甄选
  • 2026年靠谱的矿用锚杆厂家推荐,解决易磨损等痛点
  • 转存WORD到CKEDITOR时公式乱码如何修复?
  • 一站式解决方案!洗车行业必备小程序系统功能清单大公开
  • Java版LeetCode热题100之只出现一次的数字:从暴力破解到异或优化,深入理解位运算在算法中的妙用
  • Java版LeetCode热题100之多数元素:从暴力解法到Boyer-Moore投票算法的全面解析
  • 2026年值得关注的全自动除锈机厂家,上海蓝云管道除锈机不容错过
  • 国外学术论文怎么找:高效检索国外学术论文的实用方法与途径指南
  • 五金制造ERP有哪些常见核心模块
  • 聊聊明诺电动科技的美誉度,合作名企众多口碑到底咋样?
  • 私有化部署VS云服务:数字化转型中的部署策略选择
  • 2026市场调查公司推荐广州策点,专业调研与数据分析服务首选
  • 2025光纤滑环市场新格局,谁更耀眼?帽式导电滑环/编码器滑环/旋转接头/电环,光纤滑环供应商哪家权威
  • 深度剖析中项网与瑞达恒对比哪家靠谱?为你揭晓答案
  • 2026年衡阳性价比高的装修公司排名,亿品装饰有限公司实力怎么样
  • 国防项目中,JAVA如何实现超大文件的分块与断点续传?
  • 剖析气体灭火案例,说说FM200气体灭火制造商哪家比较靠谱
  • 2026年上海蓝云管道管道外壁除锈机批发排名,哪家比较靠谱