R 查找哪个共享库?

问题描述 投票:0回答:0

如何知道 R 找到了哪个共享库?我现在的情况是这样的:

我们正在尝试提供具有多个不同接口的 R 环境,同时提供尽可能多的一致性(例如,我们希望在所有接口中使用相同的库):我们可以从控制台调用 R,我们可以运行 RStudio ,我们可以在 Jupyter notebooks 下运行 R notebooks。所有三个接口都由相同的类 Unix 硬件和操作系统 (RedHat) 支持。不同的用户有不同的界面偏好。

在我们当前的配置下,我们可以从控制台运行 R 并加载

vroom
包就好了:

$ R
> library(vroom)
> # no news is good news

但是,在当前条件下,

library(vroom)
在我们的 RStudio 设置下失败:

> library(vroom)
Error: package or namespace load failed for ‘vroom’ in dyn.load(file, DLLpath = DLLpath, ...):
  unable to load shared object '/PATH-PREFIX-REDACTED/miniconda3-1/envs/r/lib/R/library/vroom/libs/vroom.so':
  miniconda3-1/envs/r/lib/R/lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /PATH-PREFIX-REDACTED/miniconda3-1/envs/r/lib/R/library/vroom/libs/vroom.so)

RStudio 的错误为我提供了失败原因的线索。但是我怎么才能知道为什么控制台版本是成功(它找到了哪个

libstdc++.so.6
)?

我已经阅读了一点(在 StackOverflow [1, 2] 和其他地方 [3])关于

dyn.load
可能如何工作,但我仍然不明白为什么 consolde R 成功加载
vroom
libstdc++.so.6
上的
LD_LIBRARY_PATH
都没有
GLIBCXX_3.4.30
(根据我对
objdump -x
输出的理解)。

附加信息

“控制台”和“RStudio”中的

.libPaths()
相同 R:

> .libPaths()
# [1] "PATH-PREFIX-REDACTED/R_LIBS_SITE/R4.2"                 
# [2] "PATH-PREFIX-REDACTED/miniconda3-1/envs/r/lib/R/library"

AFAICT(

ls <directory>
),vroom 包仅安装在
.libPaths()
的“miniconda”路径下,所以我担心@Mikael-Jagan 的观点有点没有实际意义(但是,+1 指出新的-
ldd
的 to-me 工具):显然相同的
vroom.so
正在“控制台”和“RStudio”R 下加载。现在我更困惑了, 因为 vroom 包不应该找到相同的
libstdc++.so.6
在任何一种情况下?

r shared-libraries
© www.soinside.com 2019 - 2024. All rights reserved.