使用 Ubuntu18.04 已经有一段时间了, 在使用过程中经常需要处理不同软件的编译工作, 但是这时候就遇到这样一个问题, 那就是不同软件, 甚至是同一个软件的不同版本都会使用不同版本的 gcc/g++ 来进行编译.
Ubuntu18.04 中自带的 gcc/g++ 版本为 7.3, 这时候如果我们想要安装 4.8 版本的, 那么命令如下:
- sudo apt-get install gcc-4.8
- sudo apt-get install g++-4.8
安装成功后查看 gcc/g++ 调用版本是否正确:
由上图可以发现即使是安装好 gcc/g++ 4.8 版本后我们的系统识别的版本还是 7.3 .
查看 gcc/g++ 具体地址:
查看路径下是否存在多版本的 gcc/g++ :
ls /usr/bin/gcc* ls /usr/bin/g++*
我们可以发现其实系统里面已经有三个版本的 gcc/g++, 分别是 4.8, 5, 7 .
查看细节:
可以发现,
gcc 方面:
/usr/bin/gcc 是链接到 /etc/alternatives/gcc 上的, 而
/usr/bin/gcc-7 是链接到 /usr/bin 目录下的 x86_64-Linux-gnu-gcc-7 ,
/usr/bin/gcc-4.8 和 /usr/bin/gcc-5 是没有链接到任何文件的.
g++ 方面:
/usr/bin/g++ 链接到 /etc/alternatives/g++ 上的,
/usr/bin/g++-7 链接到 /usr/bin/ 目录下 x86_64-Linux-gnu-g++-7 文件的,
/usr/bin/g++-4.8 和 /usr/bin/g++-5 是没有链接到任何文件的.
接着下一步, 我们查看 /usr/alternatives/gcc 和 /usr/alternatives/g++ 的详细情况:
可以发现 /usr/alternatives/gcc 和 /usr/alternatives/g++ 最终链接又回到了 /usr/bin/ 文件目录下的 gcc-7 和 g++-7 .
由此我们可以大胆猜测, 可执行文件 /usr/bin/gcc 和 /usr/bin/g++ 其实就是一个软链接, 真正的可执行文件其实是:
- /usr/bin/gcc-4.8 所指向的 /usr/bin/x86_64-Linux-gnu-gcc-4.8
- /usr/bin/gcc-5 所指向的 /usr/bin/x86_64-Linux-gnu-gcc-5
- /usr/bin/gcc-7 所指向的 /usr/bin/x86_64-Linux-gnu-gcc-7
和
- /usr/bin/g++-4.8 所指向的 /usr/bin/x86_64-Linux-gnu-g++-4.8
- /usr/bin/g++-5 所指向的 /usr/bin/x86_64-Linux-gnu-g++-5
- /usr/bin/g++-7 所指向的 /usr/bin/x86_64-Linux-gnu-g++-7
作为中转的软链接,/usr/alternatives/gcc 和 /usr/alternatives/g++ 是我们在做 gcc/g++ 版本选择时所需要切换的文件, 同时指定版本的
/usr/bin/gcc-* 和 /usr/bin/g++-* 会指向同目录下的可指向文件.
而,
/usr/bin/gcc -> /etc/alternatives/gcc
/usr/bin/g++ -> /etc/alternatives/g++ 是固定不变的.
=============================================================
来源: http://www.bubuko.com/infodetail-2944815.html