离线服务器之gcc,g++,cuda,cudnn版本更新
服务器:root 普通用户 centos7.5
状态:root权限安装,离线,提供给普通用户高版本使用
项目1:更新gcc,g++
由于需要运行cw2vec(https://github.com/noobiegz/cw2vec)需要c++11,本机的gcc为4.8.5,至少需要5.0的。因此进行升级。
首先尝试yum install gcc,gcc-c++,服务器会进行更新,但版本还是4.8.5。在https://mirrors.ustc.edu.cn/gnu/gcc/gcc-8.1.0/ 。下载gcc安装教程可以参考:https://blog.csdn.net/hanzheng260561728/article/details/75125891。要点在于离线情况下,./contrib/download_prerequisites无法自己安装需要的包。因此需要手动安装需要的包,从download_prerequisites可以查看依赖包名和版本。然后跟着教程,一个个编译安装即可。
在gcc的 make install完成后,通过查看gcc –v和g++ -v查看当前版本。如果两者都为高版本且一致,说明安装成功。但是发现在普通用户下执行编译出错。Bug为:
gcc: error trying to exec ‘cc1plus’: execvp: 没有那个文件或目录。在网上查找解决方案,发现基本如链接所示但问题是gcc –v和g++ -v的版本一致啊!!!
https://blog.csdn.net/Todd_Dijkstra/article/details/52971548
这是一个神奇的问题,我搜了好久好久,都是别人的gcc,g++不对。我却一致。然后我开始尝试在root用户下进行编译,竟然成功了。但是普通用户却还是错的。由此可得软件我们装成功了,但是普通用户用不了,什么问题?当然是权限问题。我去查看cc1plus所在目录的权限,发现普通用户无法读,因此找不到,所以报错为no such file。
我通过chmod –R 755 dir_path 解决了问题。
难点在于:当出现问题,如何一步步排查,找到问题的关键点,网上的解决要半信半疑,要自己分析可能的原因。(ps:软链接的使用也是一个技巧)
项目2:更新cuda,cudnn