R包安装失败找不到现有的dylib
R package installation fails cant find existing dylib
将 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 在安装失败或发生这种情况的某些原因时不要删除文件?
使用:
./configure --prefix=$HOME/RTargets/3.3 --enable-R-shlib
您需要在设置使用自定义目录时启用共享库选项。
推荐阅读:RStudio Building R from Source
https://support.rstudio.com/hc/en-us/articles/218004217-Building-R-from-source
我多次尝试完全删除 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 配置脚本(我在 3.3.1 和 3.3.2 上试过)在检测到 Darwin 时跳过配置 R 库路径。它有一条注释,说明脚本假定默认值 OS path lookup 将正常发生,设置任何值都会改变其行为。
我不确定断开连接的位置:这是 dyn.load 的错误、OS 行为的变化还是其他原因。通过在 ./configure 或 make 阶段设置变量可能有更好的方法来解决这个问题,但我无法解决这个问题。
将 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 在安装失败或发生这种情况的某些原因时不要删除文件?
使用:
./configure --prefix=$HOME/RTargets/3.3 --enable-R-shlib
您需要在设置使用自定义目录时启用共享库选项。
推荐阅读:RStudio Building R from Source
https://support.rstudio.com/hc/en-us/articles/218004217-Building-R-from-source
我多次尝试完全删除 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 配置脚本(我在 3.3.1 和 3.3.2 上试过)在检测到 Darwin 时跳过配置 R 库路径。它有一条注释,说明脚本假定默认值 OS path lookup 将正常发生,设置任何值都会改变其行为。
我不确定断开连接的位置:这是 dyn.load 的错误、OS 行为的变化还是其他原因。通过在 ./configure 或 make 阶段设置变量可能有更好的方法来解决这个问题,但我无法解决这个问题。