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

时间:2021-04-17 19:45:49

标签: 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 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,这也没有帮助。

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

1 个答案:

答案 0 :(得分:1)

如果其他人将来也遇到此问题,我将发布https://answers.launchpad.net/ubuntu 向我建议的解决方案。这是我发布的问题的链接: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,请包含以下内容:suppressMessages(bspm::enable())Rprofile.site 文件中。

非常感谢德克的指导。