在HPC集群运行R的INLA模型时出现CXXABI_1.3.8未找到错误
HPC集群中R-INLA包运行报错:找不到CXXABI_1.3.8的解决办法
问题背景
按官方教程在HPC集群安装R的INLA包后,运行测试模型时出现版本依赖报错,更换GCC版本后问题仍存在,但该模型在本地电脑可正常运行。
报错信息
/storage/homefs/'username'/R/x86_64-pc-linux-gnu-library/4.1/INLA/bin/linux/64bit/inla.mkl: /storage/homefs/'username'/R/x86_64-pc-linux-gnu-library/4.1/INLA/bin/linux/64bit/first/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /software.el7/software/ICU/69.1-GCCcore-10.3.0/lib64/libicuuc.so.69)
测试脚本
library(INLA) n = 100; a = 1; b = 1; tau = 100 z = rnorm(n) eta = a + b*z scale = exp(rnorm(n)) prec = scale*tau y = rnorm(n, mean = eta, sd = 1/sqrt(prec)) data = list(y=y, z=z) formula = y ~ 1+z result = inla(formula, family = "gaussian", data = data) summary(result)
解决方法
1. 让INLA优先使用集群兼容的libstdc++库
INLA自带的libstdc++.so.6版本偏旧,和集群ICU库依赖冲突。可以通过设置环境变量,让系统优先加载集群GCC对应的库:
- 在终端启动R前执行:
export LD_LIBRARY_PATH=/software.el7/software/GCCcore/10.3.0/lib64:$LD_LIBRARY_PATH - 或者在R脚本开头添加:
注意路径需匹配集群上GCCcore-10.3.0的实际lib64位置。Sys.setenv(LD_LIBRARY_PATH = paste0("/software.el7/software/GCCcore/10.3.0/lib64:", Sys.getenv("LD_LIBRARY_PATH")))
2. 禁用INLA自带的内置库
通过环境变量强制INLA使用系统已安装的兼容库:
Sys.setenv(INLA_DONT_USE_BUILTIN_LIBS = "TRUE") library(INLA)
3. 基于集群环境重新编译安装INLA
如果上述方法无效,加载集群对应版本的GCC(如GCCcore/10.3.0)后,从源码编译安装INLA:
install.packages("INLA", repos=c(getOption("repos"), INLA="https://inla.r-inla-download.org/R/stable"), dep=TRUE)
编译过程会自动适配集群的库版本,彻底解决依赖问题。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

