R 软件的 CXX11 is not defined 解决
在 CentOS-6.5 下使用源码安装的 R-3.6.0 在安装包的时候出现 “C++11 standard requested but CXX11 is not defined” 错误。下面是参考的解决方法。
> install.packages("pillar")
also installing the dependencies ‘digest’, ‘vctrs’
trying URL 'http://mirror.lzu.edu.cn/CRAN/src/contrib/digest_0.6.19.tar.gz'
Content type 'application/octet-stream' length 140243 bytes (136 KB)
==================================================
downloaded 136 KB
......
* installing *source* package ‘digest’ ...
** package ‘digest’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
Error in .shlib_internal(args) :
C++11 standard requested but CXX11 is not defined
* removing ‘/RiboBio/Bioinfo/Pipeline/SoftWare/R/R-3.6.0/lib64/R/library/digest’
ERROR: dependency ‘digest’ is not available for package ‘vctrs’
* removing ‘/RiboBio/Bioinfo/Pipeline/SoftWare/R/R-3.6.0/lib64/R/library/vctrs’
ERROR: dependency ‘vctrs’ is not available for package ‘pillar’
* removing ‘/RiboBio/Bioinfo/Pipeline/SoftWare/R/R-3.6.0/lib64/R/library/pillar’
The downloaded source packages are in
‘/tmp/RtmpcowP8e/downloaded_packages’
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
Warning messages:
1: In install.packages("pillar") :
installation of package ‘digest’ had non-zero exit status
2: In install.packages("pillar") :
installation of package ‘vctrs’ had non-zero exit status
3: In install.packages("pillar") :
installation of package ‘pillar’ had non-zero exit status
>
解决方法:《“CXX11 is not defined” problem in MRO 3.4》
(Actually I vaguely remember encountering the same problem in MRO 3.3, and solved it using similar method. Unfortunately I didn’t write it down.)
_Note: MRO means **Microsoft R Open** (previously _Revolution R) > **Recently I tried to set up the R development environment on a fresh Linux system, every thing went well until I hit this error installing xgboost: **Package installation error: “C++11 standard requested but CXX11 is not defined”**After some Googling I found > this Github issue. It appears to be a MRO-specific problem, and > mjmg provided a working solution.> The gist is, replacing every “CXX1X” with “CXX11” in R compiler configuration files (System wide:
${R_HOME}/etc/Makeconf
Per-user:~/.R/Makevars
) and fill in some values:
CXX11 = g++ CXX11FLAGS = -O2 -g $(LTO) CXX11PICFLAGS = -fPIC CXX11STD = -std=c++11
>
> That's it!
我个人的解决方法是,直接修改 /Bioinfo/Pipeline/SoftWare/R/R-3.6.0/lib64/R/etc/Makeconf 文件,替换下面的内容:
```yaml
CXX11 = g++
CXX11FLAGS = -O2 -g $(LTO)
CXX11PICFLAGS = -fPIC
CXX11STD =
- CXX11STD 值必须为空,否则在 R 中** install.packages()** 会出现另外的错误:cc1plus: error: unrecognized command line option “-std=c++11”。