apt ubuntu 指定ipv4_NVIDIA驱动gcc不匹配 - 安装指定gcc版本(Linux/Ubuntu)

gcc不匹配的问题可见 李森科在zhihu:NVIDIA驱动安装-从问题到解决(Linux/Ubuntu)的第四个警告。

可能你会问:那我直接在apt下载指定版本的gcc不就可以了吗?

gcc有很多个分支,如gcc4,gcc5,gcc7。经过我的多次尝试发现,使用apt下载gcc,总是只能下载到某分支的最新版本,但却不能挑选版本。(如果有发现如何使用apt命令可以指定版本的朋友,欢迎留言,反正我是没搜到。)

如果你要安装指定版本gcc,我只找到了手动安装的方法,如Ubuntu16.04安装GCC 7.4.0编译器,而大多数方法没有解释在安装完成之后的操作。加上我写的第7步,这个问题才真正算是圆满解决了。

本文以gcc7.4.0的安装为例。

1 - 安装make和低版本gcc,g++

如果你要安装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++

2 - 下载对应gcc版本的安装包,建立build文件夹

如果你可以使用国外的镜像,可以参考这个。

apt ubuntu 指定ipv4_NVIDIA驱动gcc不匹配 - 安装指定gcc版本(Linux/Ubuntu)_第1张图片
点左下角那个To obtain GCC please use our mirror sites

然后下载gcc-7.4.0.tar.gz(122MB,日本那个镜像好像有问题,下载下来六百多兆)

从下载复制到主目录,解压。

再建立一个新的文件夹(名字任取)。

mkdir gcc-build

apt ubuntu 指定ipv4_NVIDIA驱动gcc不匹配 - 安装指定gcc版本(Linux/Ubuntu)_第2张图片

PS: 从现在开始,建议使用root权限来进行以下操作,这样一来可以少敲很多个sudo,二来不会因为忘记sudo而导致一些操作失败。

要进入root权限,首先设置密码,然后再进入(和退出)。

sudo passwd root

su

3 - 下载依赖文件

进入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详细步骤(附问题集)

4 - 配置

在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

5 - 制作文件及安装

在配置完成后,制作文件以及安装文件。

make

make check

make install

6 - 验证安装成果

查看一下gcc的版本以及gcc安装的位置。

gcc --version

which gcc

apt ubuntu 指定ipv4_NVIDIA驱动gcc不匹配 - 安装指定gcc版本(Linux/Ubuntu)_第3张图片

只要你一直是在root权限下操作的,对应的库也安装齐了,一般到这一步没有什么问题。

如果你没有使用root权限,可能会像我一样装十次有一般是失败的,然后为了保证gcc删除干净而重装电脑。

网上大多数教程到了这一步也就结束了,而后面的问题虽然不难,但很少有人讲。

7 - 存在的问题:NVIDIA无法识别安装在/usr/local的gcc

我们再来看看NVIDIA驱动安装的情况。

apt ubuntu 指定ipv4_NVIDIA驱动gcc不匹配 - 安装指定gcc版本(Linux/Ubuntu)_第4张图片

引用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即可。

39007c9e7af2d4289beb3b7bfc70dbef.png

这样一来,那个警告就会消除了。

PS:其实这样直接链接不是最好的方式,但如果你的电脑里面暂时只需要一个版本,那么直接链接就可以了。如果要实现gcc的版本控制,应该结合update-alternative一起使用(如Ubuntu下gcc多版本共存和版本切换)。

总之,理解了NVIDIA如何识别gcc的原理之后,一切都会迎刃而解。

感谢你的阅读,愿你能愉快地安装指定版本的gcc。

你可能感兴趣的:(apt,ubuntu,指定ipv4)