centos7安装rstan
最近需要安装ggstatsplot这个包,里面需要安装metaBMA,然后metaBMA又依赖于rstan,于是安装rstan对我的折磨就开始了。以下内容将分享如何在centos7平台安装rstan。
# 问题描述
安装ggstatsplot时报错,提示metaBMA包安装失败,原因是rstan这个依赖包安装,基于官网trace结果是**caught segfault** address 0x20, cause 'memory not mapped'
。装包怎么会有内存错误,开始以为是什么包之间有冲突,没当回事,可是仔细想想显然不可能,于是回过头看报错,发现问题主要在于rstan,rstan虽然安装成功但是编译stan程序会报错,用官网的8school案例测试,同样报错caught segfault。
# 问题分析
根据github官网上的描述和issue里的内容,问题应该出在编译Rcpp包的gcc版本与编译rstan的gcc版本不同。
# 解决流程(包括安装rstan全过程)
# 安装新版本gcc
centos7的预装gcc版本为4.8.5,刚好不满足rstan的最低要求😓。以下为gcc-9.1.0安装流程(一下流程会覆盖gcc,谨慎操作):
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -xzvf gcc-9.1.0.tar.gz
cd gcc-9.1.0
./contrib/download_prerequisites
mkdir build
cd build
../configure --prefix=/usr -enable-checking=release --enable--long-long--with-system-zlib -enable-languages=c,c++,fortran -disable-multilib
# 这样安装会覆盖原有gcc
make -j8
make install
ldconfig -v
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 安装Rcpp和rstan
进入R,输入以下命令:
dotR = file.path(Sys.getenv("HOME"), ".R")
if (!file.exists(dotR)) dir.create(dotR)
M = file.path(dotR, "Makevars")
if (!file.exists(M)) file.create(M)
cat("\nCXX14FLAGS=-O3 -march=native -mtune=native -fPIC", "CXX14=g++", file = M, sep = "\n", append = TRUE)
install.packages("Rcpp") # 很重要,必须保持一致性编译
Sys.setenv(MAKEFLAGS = "-j8")
install.packages("rstan", type = "source")
install.packages("ggstatsplot")
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
参考链接: https://github.com/stan-dev/rstan/wiki/Installing-RStan-on-Linux (opens new window) https://github.com/stan-dev/rstan/issues/728 (opens new window)
上次更新: 2024/03/11, 23:50:27