CentOS7下R3.6.0安装DADA2时RcppEigen编译失败如何解决?
解决CentOS 7下安装DADA2 v1.16时RcppEigen编译失败的问题
问题原因
CentOS 7默认的GCC编译器版本为4.8.5,对C++标准的支持有限,而RcppEigen编译时用到的FCONE宏是高版本GCC引入的特性,低版本编译器无法识别,导致编译报错。
解决方案
方案一:升级系统编译器(推荐)
CentOS 7可以通过SCL软件源安装高版本GCC,步骤如下:
- 安装SCL源:
yum install centos-release-scl - 安装GCC 9.x版本:
yum install devtoolset-9-gcc devtoolset-9-gcc-c++ - 临时激活GCC 9环境(当前终端有效):
若要永久生效,可将以下内容添加到scl enable devtoolset-9 bash~/.bashrc文件末尾:source /opt/rh/devtoolset-9/enable - 在激活GCC 9的终端中启动R,先安装对应版本的RcppEigen,再安装DADA2:
# 安装DADA2 v1.16依赖的RcppEigen版本 devtools::install_version("RcppEigen", version = "0.3.3.9.1") # 安装DADA2 devtools::install_github("benjjneb/dada2", ref = "v1.16")
方案二:修改RcppEigen源码(临时 workaround)
若无法升级编译器,可手动修改RcppEigen的源码替换FCONE宏:
- 下载对应版本的RcppEigen源码包:
wget https://cran.r-project.org/src/contrib/RcppEigen_0.3.3.9.1.tar.gz - 解压源码包:
tar zxf RcppEigen_0.3.3.9.1.tar.gz - 编辑
RcppEigen/src/fastLm.cpp文件,将第147行和151行的FCONE替换为(void*)0 - 安装修改后的RcppEigen:
R CMD INSTALL RcppEigen - 启动R,安装DADA2:
devtools::install_github("benjjneb/dada2", ref = "v1.16")
内容的提问来源于stack exchange,提问作者IceMajor
相关产品推荐
相关产品推荐

