项目场景:
使用R语言脚本生成污染玫瑰图
java调用R脚本生成图片,返回前端
问题描述
R环境安装遇到的问题
污染玫瑰图需要用到openair包,在openair包中有一个interp包,R里面的gcc版本如果是4.8的,在编译interp包时会有一处lambda报错
/usr/include/c++/4.8.2/bits/stl_algo.h:2263:35: 错误:对‘(graham_scan(std::vector<Point2D>)::__lambda1) (Point2D&, const Point2D&)’
原因分析:
原因是gcc的版本过低造成,需要用到7.3的版本
R里面有自己的gcc编译器,centos也有一套gcc,两者是独立的,只升级centos的gcc没有作用
解决方案:
升级centos的gcc版本,R在编译包时,引用centos的gcc编译
- 安装devtoolset-7软件包
sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
- 启用devtoolset-7环境
scl enable devtoolset-7 bash
- 检查gcc版本
gcc --version
- 进入R,查看gcc版本
注:只是当前窗口临时改变,关闭窗口重开,R中的gcc版本会恢复
system("gcc --version")
Sys.setenv(PATH = paste("/opt/rh/devtoolset-7/root/usr/bin", Sys.getenv("PATH"), sep=":"))
5. 修改编译时需要的gcc版本
Sys.setenv(PATH = paste("/opt/rh/devtoolset-7/root/usr/bin", Sys.getenv("PATH"), sep=":"))
接下来就可以正常编译需要高版本gcc才能编译的包了