gcc不匹配的问题可见 NVIDIA驱动安装-从问题到解决(Linux/Ubuntu)的第四个警告。
可能你会问:那我直接在apt下载指定版本的gcc不就可以了吗?
gcc有很多个分支,如gcc4,gcc5,gcc7。经过我的多次尝试发现,使用apt下载gcc,总是只能下载到某分支的最新版本,但却不能挑选版本。(如果有发现如何使用apt命令可以指定版本的朋友,欢迎留言,反正我是没搜到。)
如果你要安装指定版本gcc,我只找到了手动安装的方法,如Ubuntu16.04安装GCC 7.4.0编译器,而大多数方法没有解释在安装完成之后的操作。加上我写的第7步,这个问题才真正算是圆满解决了。
本文以gcc7.4.0的安装为例。
如果你要安装gcc,那么你必须有一个可用的gcc,g++和make,有了这些工具你才可以编译。
sudo apt install gcc-5
sudo apt install make
sudo apt install make-guile
在安装好gcc和g++后,你需要把安装好的gcc-5和g++-5链接到gcc和g++,这样你才能在shell里面直接调用。
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
sudo ln -s /usr/bin/g++-5 /usr/bin/g++
如果你可以使用国外的镜像,可以参考这个。
点左下角那个To obtain GCC please use our mirror sites
然后下载gcc-7.4.0.tar.gz(122MB,日本那个镜像好像有问题,下载下来六百多兆)
从下载复制到主目录,解压。
再建立一个新的文件夹(名字任取)。
mkdir gcc-build
PS: 从现在开始,建议使用root权限来进行以下操作,这样一来可以少敲很多个sudo,二来不会因为忘记sudo而导致一些操作失败。
要进入root权限,首先设置密码,然后再进入(和退出)。
sudo passwd root
su
进入gcc-7.4.0文件夹,远程下载依赖文件。
cd gcc-7.4.0
./contrib/download_prerequisites
cd ..
如果远程无法下载,可以去Index of /pub/gcc/infrastructure下载gmp-6.1.0.tar.bz2,mpfr-3.1.4.tar.bz2,mpc-1.0.3.tar.gz,isl-0.16.1.tar.bz2这四个文件,然后进行安装。
手动安装连接如下:ubuntu18.04安装gcc详细步骤(附问题集)
在gcc-build文件夹中进行配置,gcc-7.4.0文件夹要换成你电脑的绝对路径。
cd gcc-build
/home/henchli/gcc-7.4.0/configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
在配置完成后,制作文件以及安装文件。
make
make check
make install
查看一下gcc的版本以及gcc安装的位置。
gcc --version
which gcc
只要你一直是在root权限下操作的,对应的库也安装齐了,一般到这一步没有什么问题。
如果你没有使用root权限,可能会像我一样装十次有一般是失败的,然后为了保证gcc删除干净而重装电脑。
网上大多数教程到了这一步也就结束了,而后面的问题虽然不难,但很少有人讲。
我们再来看看NVIDIA驱动安装的情况。
引用NVIDIA驱动安装-从问题到解决(Linux/Ubuntu)中的一段话来解释这个问题。
GNU编译器套装(GNU Compiler Collection,缩写为gcc),指一套编程语言编译器集合,可以编译C,C++,Java等语言。在Linux下调用cc时,其实际上并不指向unix的cc编译器,而是指向了gcc,也就是说cc是gcc的一个链接(快捷方式)。
换句话说,你把gcc安装到了/usr/local/bin里面,但NVIDIA识别的是/usr/bin中的cc文件。
注意,识别的不是gcc文件!在/usr/bin里面现在已经有一个/usr/bin/gcc了,指向的是/usr/bin/gcc-5。
这样以来,只需要将/usr/local/bin里面的gcc(7.4.0)链接到/usr/bin中的cc即可。
这样一来,那个警告就会消除了。
PS:其实这样直接链接不是最好的方式,但如果你的电脑里面暂时只需要一个版本,那么直接链接就可以了。如果要实现gcc的版本控制,应该结合update-alternative一起使用(如Ubuntu下gcc多版本共存和版本切换)。
总之,理解了NVIDIA如何识别gcc的原理之后,一切都会迎刃而解。