抱歉,本文较长,结尾处有tl;dr简介。
我的电脑运行的是macOS Catalina操作系统。我正在尝试在Rstudio(1.3.1093)中安装一些软件包,但是我一直在两个不同的错误之间徘徊,都与openssl有关。
我知道R想要安装的openssl是同名系统库的包装器。当我在Rstudio中尝试安装openssl时,会出现以下错误提示:
如果我更明智地使用brew安装openssl并将opensslv.h软链接更改为指向由brew安装的opensslv.h,则在安装R中的openssl时,无论是在Rstudio中还是通过终端运行R,在进行更加合理的操作时也会出现相同的错误。
根据我在线阅读的内容,最后一个R错误(r名称空间加载失败)与我的系统上有多个openssl版本有关。 是的,我的系统上有大量的openssl版本(使用locate和grep显示我有212个openssl副本),但其中绝大多数来自anaconda、ruby或node,而看起来路径下唯一的一个是/usr/bin/openssl, 顺便说一下,这是macOS较新版本上的只读文件。
因此,我的问题是A)我的PATH中是否有太多版本的openssl,B)如何找到它们所有的位置?
请不要评判我的系统管理; 我在尝试安装这些R软件包时做了愚蠢的事情,现在我担心我已经挖了一个太深的洞,无法爬出来!
简而言之:如果我的macOS PATH中安装了多个系统库(例如openssl)的版本,如何找到它们所有的位置? 类似于linux的某些东西。
我的电脑运行的是macOS Catalina操作系统。我正在尝试在Rstudio(1.3.1093)中安装一些软件包,但是我一直在两个不同的错误之间徘徊,都与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
实际上,这是一个软链接,指向我已删除的某些内容。好的,我更改了软链接,并让它指向系统中其他地方的另一个openssl/opensslv.h文件(我的系统上确实有很多openssl软件包,主要与rails或anaconda有关)。之后我尝试运行:
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软链接更改为指向由brew安装的opensslv.h,则在安装R中的openssl时,无论是在Rstudio中还是通过终端运行R,在进行更加合理的操作时也会出现相同的错误。
根据我在线阅读的内容,最后一个R错误(r名称空间加载失败)与我的系统上有多个openssl版本有关。 是的,我的系统上有大量的openssl版本(使用locate和grep显示我有212个openssl副本),但其中绝大多数来自anaconda、ruby或node,而看起来路径下唯一的一个是/usr/bin/openssl, 顺便说一下,这是macOS较新版本上的只读文件。
因此,我的问题是A)我的PATH中是否有太多版本的openssl,B)如何找到它们所有的位置?
请不要评判我的系统管理; 我在尝试安装这些R软件包时做了愚蠢的事情,现在我担心我已经挖了一个太深的洞,无法爬出来!
简而言之:如果我的macOS PATH中安装了多个系统库(例如openssl)的版本,如何找到它们所有的位置? 类似于linux的某些东西。
ldconfig -p|grep openssl
echo $(brew --prefix openssl)
,然后将输出添加到您的~/.R/Makevars
文件中的两行,例如(如果命令的输出是/usr/local/opt/openssl@1.1
),请在Makevars文件中分别添加LDFLAGS=-L/usr/local/opt/openssl@1.1/lib
和CPPFLAGS=-I/usr/local/opt/openssl@1.1/include
。要在macOS Big Sur中从源代码编译软件包,请参见我的说明:https://dev59.com/Z1EG5IYBdhLWcg3wfPPB#65334247 - jared_mamrot