【问题标题】:Unable to install some R packages in Ubuntu 20.04 because of internal compiler error: Segmentation fault由于内部编译器错误,无法在 Ubuntu 20.04 中安装某些 R 包:分段错误
【发布时间】:2021-07-12 11:44:25
【问题描述】:

我最近在 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,这也没有帮助。

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

【问题讨论】:

  • 您是否尝试过进入您的库并手动删除包含受影响库的文件夹?当包在安装中遇到错误时,这通常对我很有帮助。
  • 恭喜!看起来您在 GCC 编译器中遇到了错误。也许你应该按照输出的建议去做并提交错误报告?
  • @CareyCaginalp,这些软件包甚至无法安装,因此没有要手动删除的文件夹——据我所知。 Striezel,因为我对此比较陌生,所以我不确定这是否是一个“真正的”错误。根据您的建议,我已向answers.launchpad.net/ubuntu 发布了一个问题。谢谢你们。

标签: r linux ubuntu-20.04


【解决方案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 文件中的 Edit the CC= pointer 到 gcc-10:打开终端,输入 sudo nano /usr/lib/R/etc/Makeconf 并将当前的 CC= 替换为 CC=gcc-10。保存文件。
  3. 重新启动 R 并为那些未正确编译的软件包运行 install.packages() 命令。

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

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

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

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

非常感谢 Dirk 的指导。

【讨论】:

  • Debian(因此是 Ubuntu)的 R 维护者:编译器与此无关;我们年复一年地升级了它们,并且它们(除了一个 ABI 会在很长一段时间内发生变化)总是可以互换。这个简单的答案介于不适用、不相关和可能具有误导性之间。很高兴进一步讨论 Debian 和 Ubuntu 的 r-sig-debian 列表。
  • @DirkEddelbuettel 我很惊讶这是因为我所做的事情解决了这个问题。我期待听到你的解释。
  • 您没有“解决”任何问题,您可能使用大锤子扼杀了一个可能无关的问题。 e.g. data.table 在 Ubuntu 上根本没有一般问题,或者在另一个系统上,请参阅 cloud.r-project.org/web/checks/check_results_data.table.html(暂时忽略 oldrel_macos)。 如果您有可重现的问题,请到 r-sig-debian 寻求帮助(或在此处发帖,我猜回复的质量在列表中会更好,尽管我当然也在这里回答)。
  • 重申一下:您更有可能对您的系统造成损害,疯狂地编辑配置文件是您在这里提出的“答案”。一般来说,不要这样做。 (您也可以在~/.R/Makevars 中覆盖编译器,如此处的几十个答案所示;但正如我所说,编译器与此无关。)
  • 对我的误解表示歉意。将 Makeconf 文件还原为其原始内容后,安装软件包时仍然存在上述问题。我将发布到 r-sig-debian。
猜你喜欢
  • 2014-08-18
  • 2014-05-16
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多