使用renv安装旧版本stringi失败的问题求助
解决renv环境下安装stringi 1.4.3版本的编译与冲突问题
针对stri_brkiter.cpp中isNull未声明的编译错误
- 该错误源于stringi 1.4.3与当前renv环境中Rcpp版本不兼容:新版本Rcpp已移除全局
isNull函数调用,需显式指定命名空间。 - 解决步骤:
- 先安装与stringi 1.4.3适配的Rcpp版本:
renv::install("Rcpp@1.0.6") - 重新尝试安装stringi 1.4.3:
renv::install("stringi@1.4.3") - 若仍报错,手动修改源码后本地编译:
- 下载源码包:
renv::download("stringi@1.4.3", destfile = "stringi_1.4.3.tar.gz") - 解压后找到
src/stri_brkiter.cpp,将所有isNull替换为Rcpp::isNull - 安装修改后的包:
renv::install("stringi_1.4.3")
- 下载源码包:
- 先安装与stringi 1.4.3适配的Rcpp版本:
解决devtools::install_version与renv的冲突及权限问题
- renv会严格锁定环境依赖,直接用devtools安装会绕过renv的版本控制,且权限问题通常是因为系统级库目录无写入权限。
- 替代方案:直接用renv的安装命令并指定编译参数,避免权限与冲突问题:
renv::install( "stringi@1.4.3", type = "source", configure.args = "--disable-pkg-config" ) - 若系统已安装ICU库,可指定ICU路径加速编译(路径根据实际情况调整):
renv::install( "stringi@1.4.3", type = "source", configure.args = "--with-icu=/usr/local/opt/icu4c" ) - 权限不足时,不要使用
sudo(会破坏renv环境隔离),可重新初始化renv到用户有权限的目录:renv::init(bare = TRUE) renv::restore()
内容的提问来源于stack exchange,提问作者Corey
相关产品推荐
相关产品推荐

