解决Rstudio中openssl安装报错

Resolving openssl install error in Rstudio

抱歉长篇大论post;见末尾的 tl;dr。

我运行正在使用 macOS Catalina。我正在尝试在 Rstudio (1.3.1093) 中的 R (4.0.3) 运行ning 中安装一些软件包,但我一直在两个不同的错误之间摇摆不定,这两个错误都与 openssl 有关。

我了解到R要安装的openssl是同名系统库的包装器。当我尝试在 Rstudio 中安装 openssl 时,出现以下错误:

Found pkg-config cflags and libs!
Using PKG_CFLAGS=-I/usr/local/include
--------------------------- [ANTICONF] --------------------------------\
Configuration failed because openssl was not found. Try installing:\
 \* deb: libssl-dev (Debian, Ubuntu, etc)\
 \* rpm: openssl-devel (Fedora, CentOS, RHEL)\
 \* csw: libssl_dev (Solaris)\
 \* brew: openssl@1.1 (Mac OSX)\
If openssl is already installed, check that 'pkg-config' is in your\
PATH and PKG_CONFIG_PATH contains a openssl.pc file. If pkg-config\
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:\
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'\
-------------------------- [ERROR MESSAGE] ---------------------------\
tools/version.c:1:10: fatal error: 'openssl/opensslv.h' file not found\
#include <openssl/opensslv.h>\
1 error generated. 

这很奇怪,因为当我去候机楼 运行 \

which openssl

我明白了

/usr/bin/openssl

当我运行,也在终端,

locate opensslv.h

返回的项目之一是

/usr/local/include/openssl/opensslv.h

虽然事实证明这是一个软 link,它指向我删除的内容。好的,所以我更改了软 link 并让它指向我系统上其他地方的另一个 openssl/opensslv.h 文件(我的系统上肯定有很多 openssl 包,主要与 rails 或蟒蛇)。之后我尝试 运行ning

install.packages("openssl")

在 Rstudio 中,这次我得到一个新错误:

Error: package or namespace load failed for ‘openssl’ in dyn.load(file, DLLpath = DLLpath, ...):\
 unable to load shared object '/usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so':\
  dlopen(/usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so, 6): Symbol not found: _EVP_PKEY_get_raw_private_key\
  Referenced from: /usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so\
  Expected in: flat namespace\
 in /usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so\
Error: loading failed\
Execution halted

如果我通过使用 brew 安装 openssl 并将 opensslv.h soft link 更改为指向 brew 安装的 opensslv.h 来更明智地做事,我在安装时会遇到同样的错误R 中的 openssl(在 Rstudio 中或在终端中通过 运行ning R)

根据我在网上阅读的内容,最后一个 R 错误(包 r 命名空间加载失败 一个)与我系统上的多个 openssl 版本有关。是的,我的系统有很多 openssl 版本(使用 locate 和 grep 显示我的系统上有 212 个 openssl 副本)但其中绝大多数来自 anaconda、ruby 或节点,并且唯一看起来像在我的 PATH 中的是 /usr/bin/openssl,顺便说一句,它在更高版本的 macOS 上是只读的。

所以我的问题是 A) 我的 PATH 中是否有太多版本的 openssl 和 B) 我怎样才能找到它们?

请不要评判我的系统管理;我一直在做一些愚蠢的事情试图安装这些 R 包,现在我恐怕我已经挖了一个太深的坑爬不出来了!

tl;dr:如果我在 macOS 的 PATH 中安装了多个版本的系统库(例如 openssl),我如何才能找到它们的位置?也许像 linux 的

ldconfig -p|grep openssl

要在您的终端中使用 echo $(brew --prefix openssl) 找到 brew openssl,然后将两行添加到您的 ~/.R/Makevars 文件中并输出,例如如果命令的输出是/usr/local/opt/openssl@1.1,添加

LDFLAGS=-L/usr/local/opt/openssl@1.1/lib
CPPFLAGS=-I/usr/local/opt/openssl@1.1/include

到您的 ~/.R/Makevars 文件。

要在 macOS Big Sur 中从源代码编译包,请参阅我的说明