R软件包安装失败,无法找到现有的dylib

时间:2017-03-03 05:35:02

标签: r dylib r-package

将R安装到自定义位置(./configure --prefix = $ HOME / RTargets / 3.3)。这很好,但install.packages(' devtools')失败了。消息是:

installing via 'install.libs.R' to /Users/me/Library/R/3.3/library/stringi
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/Users/me/Library/R/3.3/library/stringi/libs/stringi.so':
  dlopen(/Users/me/Library/R/3.3/library/stringi/libs/stringi.so, 6): Library not loaded: libicui18n.58.dylib
  Referenced from: /Users/me/Library/R/3.3/library/stringi/libs/stringi.so
  Reason: image not found
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/Users/me/Library/R/3.3/library/stringi’

但是,此文件存在:

/usr/local/lib>ls -l libicui18n*
-rwxr-xr-x  1 eqiaz44  admin  2679892 Mar  2 23:50 libicui18n.58.1.dylib
lrwxr-xr-x  1 eqiaz44  admin       21 Nov 11 14:14 libicui18n.58.dylib -> libicui18n.58.1.dylib
lrwxr-xr-x  1 eqiaz44  admin       21 Nov 11 14:14 libicui18n.dylib -> libicui18n.58.1.dylib

我无法弄清楚为什么包的加载过程无法找到dylib文件,因为它位于默认位置。我无法检查stringi.so文件引用如何被删除。

有没有办法告诉R在安装失败时删除文件或出现这种情况的原因?

2 个答案:

答案 0 :(得分:0)

使用:

./configure --prefix=$HOME/RTargets/3.3 --enable-R-shlib

设置为使用自定义目录时,需要启用共享库选项。

推荐阅读: RStudio从源构建R

https://support.rstudio.com/hc/en-us/articles/218004217-Building-R-from-source

答案 1 :(得分:0)

我试了几次完全删除R并重新安装它没有运气。即使不将R构建为共享库并仅使用默认配置设置,问题仍然存在。我确认在构建标准安装和共享库时,下面的解决方案很有用。

在看到第二段到最后一段here

后,我能够正常工作

无论出于何种原因,R函数dyn.load(...)似乎没有使用标准OS(Mac Sierra)库路径。通过修改R在加载库时使用的路径,我能够使它工作。

RHOME / etc / ldpaths中脚本的顶部如下所示:

if test -n ""; then 
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib:}
else
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib}
fi

我添加了加载库,重新启动R和安装包的位置

if test -n ""; then
: ${R_LD_LIBRARY_PATH=/usr/local/lib:${R_HOME}/lib:}
else
: ${R_LD_LIBRARY_PATH=/usr/local/lib:${R_HOME}/lib}
fi

R configure脚本(我在3.3.1和3.3.2中试过这个)在检测到Darwin时跳过配置R库路径。它有一个注释,说明脚本假定默认OS path lookup将正常发生,设置任何值都会改变其行为。

我不确定断开连接的位置:这是dyn.load的错误,操作系统行为的变化,还是别的。可能有更好的方法通过在./configure或make阶段设置变量来解决这个问题,但我无法解决这个问题。