Ubuntu 17.10升级CUDA 9.1后安装R forecast包报错求助
解决CUDA 9.1与高版本GCC冲突导致R包forecast安装失败的问题
这个问题我之前帮人处理过,本质是CUDA 9.1对GCC版本有严格限制——它不支持6.x以上的GCC版本,而Ubuntu 17.10默认预装的是GCC 7.x。当安装R的forecast包时,编译过程会调用系统默认的GCC,直接触发了CUDA的版本检查报错。
下面给你两种实用的解决办法:
方法一:临时切换系统全局GCC版本(适合一次性解决场景)
- 先安装GCC 6和G++ 6:
sudo apt-get install gcc-6 g++-6
- 将系统默认的GCC/G++临时切换到6版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6
这里的60是优先级数值,比Ubuntu 17.10默认的GCC 7优先级高,系统会优先选用GCC 6。
- 打开R,重新执行安装命令:
install.packages("forecast")
此时编译过程会使用GCC 6,不会触发CUDA的版本报错。
- 安装完成后,如果需要切回原来的GCC版本(比如继续使用CUDA的其他功能),执行:
sudo update-alternatives --config gcc
在弹出的选项列表里选择你原来的GCC版本(比如gcc-7)即可。
方法二:仅给R指定编译用的GCC版本(不修改系统全局设置)
如果你不想改动系统的默认编译器,可以单独给R设置编译环境变量:
- 同样先安装GCC 6和G++ 6:
sudo apt-get install gcc-6 g++-6
- 打开R控制台,设置编译环境变量:
Sys.setenv(CXX="/usr/bin/g++-6", CC="/usr/bin/gcc-6")
- 接着执行安装命令:
install.packages("forecast")
这样forecast包编译时会单独使用GCC 6,不会影响系统其他程序的编译器使用。
补充说明:CUDA 9.1的编译工具链是基于GCC 6开发的,更高版本的GCC引入了一些新语法和特性,nvcc暂时无法兼容,所以才会抛出这个版本不支持的错误。只要让R包编译时用兼容的GCC版本就能解决问题。
内容的提问来源于stack exchange,提问作者piie
相关产品推荐
相关产品推荐

