【问题标题】:Installing R packages in macOS Mojave: Error in if (nzchar(SHLIB_LIBADD))在 macOS Mojave 中安装 R 包:if (nzchar(SHLIB_LIBADD)) 中的错误
【发布时间】:2019-05-17 16:59:15
【问题描述】:

我一直在尝试直接从终端安装 R 包,但我所苦苦挣扎的不仅仅是在 Windows 中设置我想要的库。有时,如果我通过从 CRAN 下载它们并将它们放在 R 文件夹中来为更复杂的包安装每个依赖项,则它会起作用。 我很欣赏这效率不高,但如果我在安装某些软件包时在终端中运行 R,则会出现以下错误:

** libs
Error in if (nzchar(SHLIB_LIBADD)) SHLIB_LIBADD else character() : 
argument is of length zero
* removing ‘/anaconda3/lib/R/library/<package name>’

[...]

In install.packages("<package name>") :
installation of package ‘fpc’ had non-zero exit status

我一直在浏览许多论坛,但到目前为止我发现的唯一解决方案是手动安装单个依赖项,方法是下载它们并将它们放到主 R 文件夹中。它花费的时间比预期的要长。 任何建议将不胜感激。谢谢

【问题讨论】:

  • 也许您应该使用 R-proper 与它的 anaconda 版本,或者至少尝试一下,因为这可能是问题所在(自 WWDC 以来我一直在 Mojave 上,没有任何问题,但我使用了适当的R vs anaconda 残废 R)
  • 是的,我的最终目标是在 Jupyter 笔记本中显示我的 R 代码的所有输出,因为它是一种更易于共享的 html 格式。但是,我无法理解错误的实际含义以及如何修复它
  • 简而言之,我只能通过 conda 安装软件包,而不是从 R 中安装它们。此外,还必须更新各种依赖项,因此整个库编译是一个更耗时的过程,并且除了更新非 R 特定的依赖项外,还需要在 C++ 编译中进行大量工作。我仍然想知道这个错误意味着什么......

标签: r macos installation dependencies


【解决方案1】:

我在 R 的 conda 版本中看到了这个问题,其中 /yours/anaconda/environment/lib/R/etc/ 有一个文件 Makeconf.mro.original 和一个空的 Makeconf 文件。这不应该是故意的。

在安装某些软件包期间,R 检查 Makeconf 文件中的内容,其中一项检查是针对 SHLIB_LIBADD。 我刚刚备份了空的(或其他的)Makeconf 文件。然后将 Makeconf.mro.original 复制到 Makeconf。

这解决了我的问题。

编辑:

最近我在centos-machine 中看到在install.packages("name of library") 失败后Makeconf.mro.original 文件没有生成。对此没有简单的解决方案。

在我的例子中,R 安装在 conda 环境中。所以,我用 R 安装创建了一个新的 conda 环境。全新安装在 etc 目录中有一个 Makeconf 文件。所以,我将 Makeconf 文件从新的 R 复制到我以前工作的 R 的 etc 目录中。

最好将 Makeconf 的备份副本从 etc 保存到 Makeconf.bak 以备将来出现问题,在您的工作 R etc 目录中。

我希望这对某些情况有所帮助。

【讨论】:

  • 谢谢!您的解决方法也适用于我遇到完全相同问题的 Linux 系统。
  • 很棒的发现!这解决了 Rcpp 不适合我的问题
  • 你能帮我找到 Makeconf.mro.original 文件吗?我在 anaconda/environment/lib/R/etc/ 中看不到
  • @Samir。安装编译在不同步骤中失败并且未创建 Makeconf.pro.original 时可能会发生这种情况。无论如何,您应该查看 anaconda/envs/NameOfYourEnviroment/lib/R/etc 或者根据 R 的安装方式,可以查看 anaconda/lib/R/etc
【解决方案2】:

在我的情况下(centos 7): /home/xilab/miniconda3/lib/R/etc/Makeconf 是一个空文件!

find ~ -name Makeconf
/home/xilab/miniconda3/pkgs/r-base-3.6.1-hce969dd_0/lib/R/etc/Makeconf
/home/xilab/miniconda3/pkgs/r-base-3.6.1-h8900bf8_2/lib/R/etc/Makeconf
/home/xilab/miniconda3/envs/python2.7/lib/R/etc/Makeconf
/home/xilab/miniconda3/lib/R/etc/Makeconf

/home/xilab/miniconda3/pkgs/r-base-3.6.1-hce969dd_0/lib/R/etc/Makeconf 不为空,所以:

 mv /home/xilab/miniconda3/lib/R/etc/Makeconf /home/xilab/miniconda3/lib/R/etc/Makeconf.backup
 cp /home/xilab/miniconda3/pkgs/r-base-3.6.1-hce969dd_0/lib/R/etc/Makeconf /home/xilab/miniconda3/lib/R/etc/Makeconf

问题解决了!

【讨论】:

  • 最近又遇到一个问题(zlib.h: No such file or directory),又查看了Makeconf文件,发现需要修改-I路径。
  • vi /home/xilab/miniconda3/lib/R/etc/Makeconf # replace /opt/anaconda1anaconda2anaconda3 with /home/xilab/miniconda3 :%s/\/opt\/anaconda1anaconda2anaconda3/\/home\/xilab\/miniconda3/g
【解决方案3】:

我在尝试在安装了 conda 的 R 版本中运行 install.packages("RPostgres") 时遇到了这个问题。解决方案是使用conda 作为包管理器,而不是R 的install.packages 函数。这意味着在正常的系统命令提示符下(不在 R 中)运行这些命令:

conda search -c conda-forge RPostgres
# shows various versions of r-rpostgres
conda install -c conda-forge r-rpostgres 

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多