抱歉,这篇文章冗长;请参阅最后的 tl;dr。
\n我运行的是 macOS Catalina。我正在尝试在 Rstudio (1.3.1093) 中运行的 R (4.0.3) 中安装一些软件包,但我一直在两个不同的错误之间摇摆,这两个错误都与 openssl 有关。
\n我知道R想要安装的openssl是同名系统库的包装器。当我尝试在 Rstudio 中安装 openssl 时,出现以下错误:
\nFound pkg-config cflags and libs!\nUsing PKG_CFLAGS=-I/usr/local/include\n--------------------------- [ANTICONF] --------------------------------\\\nConfiguration failed because openssl was not found. Try installing:\\\n \\* deb: libssl-dev (Debian, Ubuntu, etc)\\\n \\* rpm: openssl-devel (Fedora, CentOS, RHEL)\\\n \\* csw: libssl_dev (Solaris)\\\n \\* brew: openssl@1.1 (Mac OSX)\\\nIf openssl is already installed, check that 'pkg-config' is in your\\\nPATH and PKG_CONFIG_PATH contains a openssl.pc file. If pkg-config\\\nis unavailable you can set INCLUDE_DIR and LIB_DIR manually via:\\\nR CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'\\\n-------------------------- [ERROR MESSAGE] ---------------------------\\\ntools/version.c:1:10: fatal error: 'openssl/opensslv.h' file not found\\\n#include <openssl/opensslv.h>\\\n1 error generated. \nRun Code Online (Sandbox Code Playgroud)\n这很奇怪,因为当我进入终端并运行 \\
\nwhich openssl\nRun Code Online (Sandbox Code Playgroud)\n我明白了
\n\n\n/usr/bin/openssl
\n
当我跑步时,也在终端中,
\nlocate opensslv.h\nRun Code Online (Sandbox Code Playgroud)\n退回的物品之一是
\n\n\n/usr/local/include/openssl/opensslv.h
\n
尽管事实证明这是一个软链接,指向我删除的内容。好的,所以我更改软链接并让它指向系统上其他位置的另一个 openssl/opensslv.h 文件(我的系统上肯定有很多 openssl 软件包,主要与 Rails 或 anaconda 有关)。之后我尝试跑步
\ninstall.packages("openssl")\nRun Code Online (Sandbox Code Playgroud)\n在 Rstudio 中,这次我收到一个新错误:
\nError: package or namespace load failed for \xe2\x80\x98openssl\xe2\x80\x99 in dyn.load(file, DLLpath = DLLpath, ...):\\\n unable to load shared object '/usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so':\\\n 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\\\n Referenced from: /usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so\\\n Expected in: flat namespace\\\n in /usr/local/lib/R/4.0/site-library/00LOCK-openssl/00new/openssl/libs/openssl.so\\\nError: loading failed\\\nExecution halted\nRun Code Online (Sandbox Code Playgroud)\n如果我通过使用brew安装openssl并更改opensslv.h软链接以指向brew安装的openssl.h来做更明智的事情,那么在R中安装openssl时会遇到相同的错误(无论是在Rstudio中还是在Rstudio中运行R)终端)
\n根据我在线阅读的内容,最后一个 R 错误(包 r 命名空间加载失败)与我的系统上的多个 openssl 版本有关。是的,我的系统有大量的 openssl 版本(使用locate 和 grep 显示我的系统上有 212 个 openssl 副本),但其中绝大多数来自 anaconda、ruby 或 node,并且是唯一一个看起来它在我的 PATH 中是 /usr/bin/openssl,顺便说一句,它在更高版本的 macOS 上是只读的。
\n所以我的问题是 A)我的 PATH 中是否有太多版本的 openssl B)如何找到它们?
\n请不要评判我的系统管理;我一直在做愚蠢的事情试图安装这些 R 软件包,现在我担心我已经挖了一个太深的洞而无法爬出来!
\ntl;dr:如果我在 macOS 的 PATH 中安装了多个版本的系统库(例如 openssl),我如何找到它们的位置?也许类似于linux的
\nldconfig -p|grep openssl\nRun Code Online (Sandbox Code Playgroud)\n
要在终端中找到brew openssl use echo $(brew --prefix 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
Run Code Online (Sandbox Code Playgroud)
到您的 ~/.R/Makevars 文件。
要在 macOS Big Sur 中从源代码编译软件包,请参阅此处的说明
| 归档时间: |
|
| 查看次数: |
4367 次 |
| 最近记录: |