安装R包DropletUtils出现undefined symbol错误的调试求助
R包DropletUtils安装undefined symbol报错调试方案
报错根因
你遇到的__ubsan_vptr_type_cache未定义符号报错,本质是编译阶段添加了UBSAN(未定义行为检测工具)的编译参数,但运行加载时找不到对应的ubsan运行时库导致的。
调试步骤
- 检查R全局编译配置
你删除的是用户目录下的自定义配置,还要排查系统级R配置:查看/usr/lib/R/etc/Makeconf、/usr/lib/R/etc/Renviron.site文件,确认是否有遗留的-fsanitize=undefined之类的sanitizer编译参数,这类参数如果是全局配置的,会作用于所有R包的编译过程。 - 验证编译工具链一致性
先执行以下命令确认R当前调用的编译器版本:
确认系统没有多版本GCC冲突后,下载DropletUtils源码手动编译,观察编译输出是否带有sanitizer相关参数:R CMD config CC R CMD config CXX
解压源码包后进入目录,执行# 下载源码到当前目录 BiocManager::install("DropletUtils", type = "source", destdir = ".")R CMD INSTALL .查看完整编译日志。 - 临时覆盖编译参数安装
终端执行以下命令启动R,临时覆盖全局编译参数后重试安装:
启动R后再执行安装命令:CFLAGS="-O2" CXXFLAGS="-O2" RBiocManager::install("DropletUtils") - 重装依赖包
DropletUtils依赖的Rhtslib、beachmat、scuttle等包如果之前带UBSAN参数编译,也会传导报错,执行命令强制重装这些依赖:BiocManager::install(c("Rhtslib", "beachmat", "scuttle"), force = TRUE) - 补全ubsan依赖
执行ldd命令查看编译生成的so文件依赖情况:
如果输出中有ubsan相关库标记为not found,执行命令安装对应依赖:ldd /home/alan/R/x86_64-pc-linux-gnu-library/4.0/00LOCK-DropletUtils/00new/DropletUtils/libs/DropletUtils.sosudo apt install libubsan0
内容的提问来源于stack exchange,提问作者alan ocallaghan
相关产品推荐
相关产品推荐

