在安装rstan时出现以下错误:

Error in .shlib_internal(args) :
C++14 standard requested but CXX14 is not defined


通过研究得知C ++ 14编译器应该可用。
如何在配置R时安装相同的组件。
使用以下命令配置R

./configure --with-readline=no --with-x=no


和安装

yum install -y devtoolset-6


但仍然无法更新C ++ 14,rstan给出了错误

Default C++ compiler:      g++   -g -O2
C++98 compiler:            g++  -g -O2
C++11 compiler:            g++ -std=gnu++11 -g -O2
C++14 compiler:            g++   -g -O2
C++17 compiler:
Fortran 90/95 compiler:    gfortran -g -O2
Obj-C compiler:


setup.sh

 yum -y update
 yum install -y centos-release-scl
 yum install -y devtoolset-6
 yum install -y devtoolset-6-gcc-gfortran
 scl enable devtoolset-6 bash
 scl enable devtoolset-6-gcc-gfortran bash
 mkdir packages
 cd packages
 wget -qO-
 https://downloads.sourceforge.net/project/libpng/zlib/1.2.8/zlib-
 1.2.8.tar.gz | tar zvx
 cd zlib-1.2.8
 ./configure
 make
 make install
 cd ..
 wget -qO- http://downloads.sourceforge.net/pcre/pcre-8.35.tar.gz |
 tar xzv
 cd pcre-8.35
 ./configure
 make
 make install
 cd ..
 wget -qO- http://tukaani.org/xz/xz-5.2.2.tar.gz | tar xzv
 cd xz-5.2.2
 ./configure
 make
 make install
 cd ..
 wget -qO- https://curl.haxx.se/download/curl-7.47.1.tar.gz | tar xzv
 cd curl-7.47.1
 ./configure
 make
 make install
 cd ..


 wget -qO- https://cran.r-project.org/src/base/R-3/R-3.4.4.tar.gz |
 tar xzv
 cd R-3.4.4
 ./configure --with-readline=no --with-x=no --prefix=/packages/R-3.4.4
 F77=gfortran
 make
 make install

最佳答案

我也遇到了这个问题,在这里我记录了如何解决。

关键是安装适当的g ++并对其进行配置。

首先,按照https://github.com/stan-dev/rstan/wiki/Installing-RStan-on-Linux的说明安装g ++版本> = 5:


使用RStan需要g ++ 4.9或更高版本


我在这里安装g ++ 8(您可以根据需要更改版本):



$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-8-gcc*


现在,您的操作系统中有了备用g ++和默认g ++。

您可以启用它并检查版本:

$ scl enable devtoolset-8 bash
$ gcc --version
$ g++ --version


查找其位置:

$ which g++
/opt/rh/devtoolset-8/root/usr/bin/g++


接下来,您需要配置~/.R/Makevars,使用vim(或其他编辑器)将以下内容放入其中:

CXX14FLAGS=-O3 -march=native -mtune=native -fPIC
CXX14=/opt/rh/devtoolset-8/root/usr/bin/g++


或使用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=/opt/rh/devtoolset-8/root/usr/bin/g++", # or clang++ but you may need a version postfix
    file = M, sep = "\n", append = TRUE)



注意:这些R命令是从https://github.com/stan-dev/rstan/wiki/Installing-RStan-on-Linux复制而来的,但CXX14标志已根据上面的位置进行了修改。


现在,您可以立即安装rstan软件包:

install.packages("rstan")


希望这可以帮助。



PS:R用户可以使用这种方法以类似的方式修改编译器标志。

08-24 18:25