R包安装报错:依赖RJSONIO加载失败问题求助
解决R 4.4.3安装RJSONIO依赖包失败(undefined symbol: VECTOR_PTR_RO)的问题
问题背景
在Ubuntu 22.04环境下,使用R 4.4.3安装rfigshare包时,其依赖的RJSONIO包安装失败,核心报错为:
Error: package or namespace load failed for ‘RJSONIO’ in dyn.load(file, DLLpath = DLLpath, ...): unable to load shared object '/home/username/R/x86_64-pc-linux-gnu-library/4.4/00LOCK-RJSONIO/00new/RJSONIO/libs/RJSONIO.so': /home/username/R/x86_64-pc-linux-gnu-library/4.4/00LOCK-RJSONIO/00new/RJSONIO/libs/RJSONIO.so: undefined symbol: VECTOR_PTR_RO Error: loading failed Execution halted
编译阶段同时出现VECTOR_PTR_RO隐式声明的警告,说明该C API宏在R 4.4版本中已被调整或移除。
解决方案
方案1:安装修复后的开发版RJSONIO
直接从GitHub安装适配R 4.4的修复版本:
install.packages("devtools") devtools::install_github("jeroen/RJSONIO")
该分支已针对R 4.4的C API变化更新了代码,替换了过时的VECTOR_PTR_RO宏。
方案2:替换依赖包,绕过RJSONIO
rfigshare的JSON处理逻辑可由jsonlite替代,无需依赖RJSONIO:
- 先安装替代包:
install.packages("jsonlite")
- 跳过
RJSONIO依赖,手动安装并加载rfigshare:
Sys.setenv("R_REMOTES_NO_ERRORS_FROM_WARNINGS" = "true") install.packages("rfigshare", dependencies = FALSE) library(jsonlite) library(rfigshare)
方案3:手动修改源码编译
若偏好使用CRAN版源码,可手动修改代码兼容R 4.4:
- 下载源码包并解压:
wget https://cran.r-project.org/src/contrib/RJSONIO_1.3-1.8.tar.gz tar -xzf RJSONIO_1.3-1.8.tar.gz cd RJSONIO/src
- 编辑
RJSON.c文件,将第73行的VECTOR_PTR_RO(tmp)替换为VECTOR_PTR(tmp) - 回到上级目录,重新编译安装:
install.packages("./RJSONIO", repos = NULL, type = "source")
前置依赖检查
确保Ubuntu系统已安装编译所需的基础依赖:
sudo apt-get update && sudo apt-get install r-base-dev libcurl4-openssl-dev
内容的提问来源于stack exchange,提问作者onurubu
相关产品推荐
相关产品推荐

