Unable to install some R packages in Ubuntu 20.04 because of internal compiler error: Segmentation fault

Unable to install some R packages in Ubuntu 20.04 because of internal compiler error: Segmentation fault

我最近在 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’

我在尝试其他包安装时遇到了类似的错误(即“内部编译器错误”),但输出略有不同。例如,install.packages("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,但没有用。我发现 Sys.getenv("PATH") 中的 PATH 指向我系统上的 miniconda3 安装,因此将其更新为 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/rstudio/bin/postback,这也没有帮助。

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

以防将来其他人也 运行 遇到此问题,我将发布 https://answers.launchpad.net/ubuntu. Here is the link to the question I posted: https://answers.launchpad.net/ubuntu/+question/696623 向我建议的解决方案。

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

  1. 安装 gcc-10,它在我的系统上不可用:sudo apt install gcc-10
  2. /usr/lib/R/etc/Makeconf文件中的
  3. Edit the CC= pointer到gcc-10:打开终端,输入sudo nano /usr/lib/R/etc/Makeconf并将当前的CC=替换为CC=gcc-10。保存文件。
  4. 重新启动 R 并 运行 那些未正确编译的包的 install.packages() 命令。

编辑: 请参阅下面的评论进行讨论。上述步骤解决了问题,但不推荐。该问题与 R 在调用 install.packages() 时未使用系统包管理器安装包有关。

安装包 bspm 解决了我的问题。 here 为那些好奇的人讨论了这个包及其实用程序。

要在R中使用install.packages()bspm有两种使用方式:

  1. bspm::enable() 在 R 内然后 install.packages()
  2. 如其文档中所写:要默认在系统范围内启用 bspm,请在 Rprofile.site 文件中包含以下内容:suppressMessages(bspm::enable())

非常感谢德克的指导。