HPC节点多版本R环境下安装vroom包失败报错求助
报错根因
你遇到的undefined symbol: __cxa_init_primary_exception报错是典型的编译器版本不匹配问题:该符号是GCC 9及以上版本C++标准库新增的接口,若编译vroom包时使用了GCC 9+版本,但运行R时环境加载的是GCC 8及更低版本的libstdc++.so动态库,就会出现符号找不到的报错。HPC环境多版本编译器共存的场景下很容易出现这类问题。
解决方案
方案1:匹配R编译所用的GCC版本
- 进入R执行
sessionInfo(),查看输出中GCC对应的版本号,确认R本身是用哪个版本的GCC编译的 - 退出R,通过HPC的module工具加载对应版本的GCC,示例命令如下(版本号替换为你HPC上实际存在的对应版本):
module load gcc/9.4.0- 重新进入R执行安装命令即可:
install.packages("vroom")- 进入R执行
方案2:通过conda安装规避依赖问题
可以直接用conda安装预编译好的vroom包,自动处理依赖匹配,无需手动调整编译器:conda install -c conda-forge r-vroom方案3:手动指定编译器路径安装
若HPC没有module管理工具,找到对应版本GCC的安装路径后,在R中指定编译器路径再安装:# 替换为实际的GCC bin目录路径 Sys.setenv(PATH = paste("/path/to/your/gcc9/bin", Sys.getenv("PATH"), sep = ":")) Sys.setenv(CC = "/path/to/your/gcc9/bin/gcc") Sys.setenv(CXX = "/path/to/your/gcc9/bin/g++") install.packages("vroom")
注意事项
- 安装前请删除之前残留的
00LOCK-vroom等锁文件目录,避免缓存干扰 - 后续使用vroom时,也要保证当前环境加载的GCC版本和编译vroom时使用的版本一致,可将
module load gcc命令写入作业脚本或.bashrc配置文件中避免版本 mismatch
内容的提问来源于stack exchange,提问作者Philibertus88
相关产品推荐
相关产品推荐

