CentOS7 HPC集群Rstan编译提示features.h文件不存在问题求助
问题根因
报错fatal error: features.h: No such file or directory是因为编译时C++编译器无法找到glibc的基础系统头文件,触发原因有两个:
- 集群加载的GCC模块未自动配置正确的系统头文件搜索路径
- 作业脚本存在路径错误,且conda R环境的编译配置和集群模块环境冲突
修复步骤
1. 修正作业脚本并补充环境变量配置
首先修正脚本中错误的cd命令(你之前cd到了R文件本身而非所在目录),加载模块后手动添加头文件、库文件搜索路径,修改后的脚本如下:
#!/bin/bash #BSUB -J cmd_stan #BSUB -P testsecurity #BSUB -R "span[hosts=1]" #BSUB -q bigmem #BSUB -n 3 #BSUB -B #BSUB -u iverskyliners@hotmail.com #BSUB -N #BSUB -o cmd_stan.%J.out #BSUB -e cmd_stan.%J.err #BSUB -R "rusage[mem=4000]" # 加载依赖模块 module load gcc/8.3.0 module load gsl/2.6 # 手动添加系统头文件、库文件搜索路径(CentOS7默认路径,若你的集群路径不同可先执行find / -name "features.h" 2>/dev/null 查找对应路径替换) export C_INCLUDE_PATH=/usr/include:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH=/usr/include:$CPLUS_INCLUDE_PATH export LIBRARY_PATH=/usr/lib64:$LIBRARY_PATH export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH # 激活conda环境 . "/nethome/mxk841/anaconda3/etc/profile.d/conda.sh" conda activate r4_Mrt # 修正路径:进入R脚本所在目录,而非cd到R文件本身 cd /scratch/projects/testsecurity/ R CMD BATCH dglnrt_re_conda.R
2. 配置R编译参数
在你的家目录下创建.R文件夹及Makevars配置文件,指定使用集群加载的GCC编译器及搜索路径:
# 登陆节点执行以下命令 mkdir -p ~/.R cat > ~/.R/Makevars <<EOF CC = gcc CXX = g++ CXX11 = g++ CXX14 = g++ CXX17 = g++ CPPFLAGS = -I/usr/include \${CPPFLAGS} CXXFLAGS = -O2 -march=native \${CXXFLAGS} LDFLAGS = -L/usr/lib64 \${LDFLAGS} EOF
3. 排查conda环境冲突
不要在conda环境中安装gcc/gxx等编译套件,conda安装的编译器和CentOS7系统适配性差,会和集群加载的GCC模块冲突,执行以下命令卸载conda环境内的编译套件:
# 登陆节点执行 conda activate r4_Mrt conda uninstall -y gcc gxx libgcc-ng libstdcxx-ng
4. 预编译测试(可选,可提前验证配置是否生效)
登陆节点加载模块、激活conda环境后,运行简单R测试代码验证编译功能:
# R内执行 library(rstan) options(mc.cores = 1) # 测试简单模型 model_code <- ' data { int<lower=0> N; vector[N] y; } parameters { real mu; } model { y ~ normal(mu, 1); } ' # 编译模型,不报错即为配置成功 model <- stan_model(model_code = model_code)
内容的提问来源于stack exchange,提问作者Mathmen
相关产品推荐
相关产品推荐

