由于内部编译器错误:分段错误,无法在Ubuntu 20.04中安装某些R软件包

由于内部编译器错误:分段错误,无法在Ubuntu 20.04中安装某些R软件包,r,linux,ubuntu-20.04,R,Linux,Ubuntu 20.04,我最近在Ubuntu 20.04.2 LTS上安装了R版本4.0.5(2021-03-31)。R正在按预期工作 但是,尽管一些软件包安装时没有出现问题(例如,R.matlab),但仍有一些软件包无法安装。例如,运行install.packages(“data.table”)会引发以下错误: * installing *source* package ‘data.table’ ... ** package ‘data.table’ successfully unpacked and MD5 sum

我最近在Ubuntu 20.04.2 LTS上安装了R版本4.0.5(2021-03-31)。R正在按预期工作

但是,尽管一些软件包安装时没有出现问题(例如,
R.matlab
),但仍有一些软件包无法安装。例如,运行
install.packages(“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’
我尝试重新安装gcc-9,但没有帮助。我发现
Sys.getenv(“PATH”)
中的路径指向我的系统上的miniconda3安装,因此更新为
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/rstudio/bin/postback
,这也没有帮助


我的目标是在不抛出这些编译器错误的情况下安装上述软件包。任何帮助都将不胜感激。

如果将来其他人也遇到此问题,我将发布由建议给我的解决方案。以下是我发布的问题的链接:

问题是R使用的是gcc-9而不是gcc-10来编译包。gcc的旧版本抛出了一个错误。以下是我为解决问题所采取的步骤:

  • 安装gcc-10,它在我的系统上不可用:
    sudo apt Install gcc-10
  • 在gcc-10的
    /usr/lib/R/etc/Makeconf
    文件中:打开终端,键入
    sudo nano/usr/lib/R/etc/Makeconf
    ,并将当前的
    CC=
    替换为
    CC=gcc-10
    。保存文件
  • 重新启动R并对未正确编译的包运行
    install.packages()
    命令
  • 编辑:请参阅下面的评论进行讨论。上述步骤解决了问题,但不推荐使用。该问题与在R中使用调用
    install.packages()
    时,R未使用系统软件包管理器安装软件包有关

    安装包
    bspm
    为我解决了这个问题。这个软件包及其实用性是为那些好奇的人讨论的

    要在R中使用
    install.packages()
    ,可以通过两种方式使用
    bspm

  • bspm::在R中启用()
    ,然后安装.packages()
  • 如其文档中所述:要在默认情况下在系统范围内启用
    bspm
    ,请在
    Rprofile.site
    文件中包含以下内容:
    suppressMessages(bspm::enable())

  • 非常感谢Dirk的指导。

    您是否尝试过进入您的库并手动删除受影响库的文件夹?当软件包在安装过程中遇到错误时,这通常对我很有帮助。恭喜!看起来您在GCC编译器中遇到了一个bug。也许你应该按照输出的建议去做,然后提交一份bug报告?@careycaginal,这些软件包甚至都无法安装,所以就我所知,没有可以手动删除的文件夹。Striezel,因为我对这个比较陌生,所以我不确定这是否是一个“真正的”bug。根据你的建议,我已经向你提出了一个问题。感谢你们两位。Debian(以及Ubuntu)的R维护者:编译器与此无关;我们年复一年地升级这些设备,并且它们(除了一个ABI更改一个loooong time ag)始终是可互换的。这个简单的答案介于不适用、无关和潜在误导之间。很高兴进一步讨论debian和Ubuntu的r-sig-debian列表。@Dirkedelbuettel我很惊讶,因为我所做的解决了这个问题。我期待着听到你的解释。你没有“解决”任何问题,你可能用了一把大锤来压制一个可能无关的问题。例如,Ubuntu上的
    data.table
    ,或者其他系统上的
    都没有一般问题,请参阅(暂时忽略oldrel_macos)。如果您有重复性问题,请访问r-sig-debian,我们会提供帮助(或者在这里发布,我猜即使我也会在这里回答课程,回复的质量也会更好)。并且重申:您更可能通过大量编辑配置文件对您的系统造成损害。这里是您的“答案”。一般来说,不要这样做。(您也可以在
    ~/.R/Makevars
    中重写编译器,如几十个答案所示;但正如我所说,编译器与此无关。)为我的误解道歉。在将Makeconf文件恢复到其原始内容之后,我仍然存在上述安装包的问题。我会发到r-sig-debian。
    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 | }
          | ^