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

Ubuntu 20.04下安装R 4.0.5的R包时触发gcc内部编译器段错误

环境与异常概况
  • 系统为Ubuntu 20.04.2 LTS,已安装R 4.0.5(2021-03-31发布版本),R本身运行状态无异常
  • 异常表现:无编译依赖的R包(如R.matlab)可正常安装,涉及C源码编译的包在安装过程中触发gcc内部段错误,无法完成编译流程

典型报错日志

安装data.table时报错

* installing *source* package ‘data.table’ ...
** package ‘data.table’ successfully unpacked and MD5 sums checked
** using staged installation
gcc -std=gnu99 9.3.0
zlib 1.2.11 is available ok
R CMD SHLIB supports OpenMP without any extra hint
** libs
gcc -std=gnu99 -I"/usr/share/R/include" -DNDEBUG     -fopenmp  -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-tRgc13/r-base-4.0.5=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c assign.c -o assign.o
during GIMPLE pass: ccp
assign.c: In function ‘memrecycle’:
assign.c:1205:1: internal compiler error: Segmentation fault
 1205 | }
      | ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions.
make: *** [/usr/lib/R/etc/Makeconf:172: assign.o] Error 1
ERROR: compilation failed for package ‘data.table’

安装xfun时报错(截断版本)

gcc -std=gnu99 -I"/usr/share/R/include" -DNDEBUG      -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-tRgc13/r-base-4.0.5=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c base64.c -o base64.o
during GIMPLE pass: ccp
base64.c: In function ‘base64_decode_impl’:
base64.c:237:1: internal compiler error: Segmentation fault
  237 | }
      | ^

已完成的排查操作

  • 重装gcc-9,故障未消除
  • 排查R会话中的Sys.getenv("PATH")发现原路径包含miniconda3安装目录,手动将PATH调整为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/rstudio/bin/postback,故障未消除

可落地的解决方案
  1. 升级gcc-9到补丁版本(根本解决方法)
    当前Ubuntu 20.04仓库中原生的gcc-9.3.0存在已知编译缺陷:在GIMPLE优化的ccp阶段处理部分代码时会触发内存越界,导致编译器自身段错误。执行系统命令安装仓库内最新的gcc-9补丁版本即可修复该问题:

    sudo apt update
    sudo apt upgrade gcc-9 g++-9
    

    补丁版本已修复ccp pass阶段的内存访问错误,可正常完成-O2等级的代码编译。

  2. 临时调整编译优化等级绕过缺陷
    如果暂时无法升级gcc版本,可修改R的编译配置,将默认的-O2优化等级调整为-O1,跳过触发bug的优化流程。在R会话中执行以下命令生成用户级的R编译配置文件,永久生效:

    # 生成配置目录(不存在则自动创建)
    config_dir <- file.path(Sys.getenv("HOME"), ".R")
    dir.create(config_dir, showWarnings = FALSE, recursive = TRUE)
    config_file <- file.path(config_dir, "Makevars")
    # 写入编译参数,将-O2替换为-O1
    writeLines(
      c(
        "CFLAGS = -O1 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2",
        "CXXFLAGS = -O1 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2"
      ),
      con = config_file
    )
    

    配置完成后重新安装失败的R包,即可正常完成编译。

  3. 彻底清理miniconda的环境残留
    手动修改PATH无法完全清除miniconda对编译流程的干扰:miniconda会向环境中注入自定义的编译参数、动态库路径变量,即使从PATH中移除conda路径,残留的环境变量仍可能影响编译流程。启动R安装包前,先在终端执行以下命令彻底清理conda相关环境:

    # 退出当前激活的conda环境
    conda deactivate
    # 清空所有conda相关的环境变量
    unset CONDA_PREFIX CONDA_DEFAULT_ENV CONDA_PYTHON_EXE CONDA_SHLVL
    # 启动R后再执行包安装操作
    R
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 06:24:04