赞
踩
GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。
gcc是GCC中的GUN C Compiler(C 编译器)
g++是GCC中的GUN C++ Compiler(C++编译器)
- 对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
- 对于 .c和.cpp文件,g++则统一当做cpp文件编译
- 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
- gcc在编译C文件时,可使用的预定义宏是比较少的
- gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏,这些宏如下:
#define GXX_WEAK 1
#define __cplusplus 1
#define __DEPRECATED 1
#define GNUG 4
#define __EXCEPTIONS 1
#define private_extern extern- 在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个
gcc -v
g++ -v
可以看到我这里的版本是gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~16.04)
ll /usr/bin/gcc*
ll /usr/bin/g++*
例如:
sudo apt install gcc-5
sudo apt install g++-5
#安装gcc-7和g++-7
sudo apt install gcc-7
sudo apt install g++-7
如果安装失败,参考这篇文章解决:【ubuntu】apt-get install失败的解决方法和参数解析
查看其链接方式
ll /usr/bin/gcc*
ll /usr/bin/g++*
下图所示,则表明是用update-alternatives管理的
下图所示,则表明不是用update-alternatives管理的,是直接链接到了对应版本的可执行文件
方式1:gcc/g++分别添加
# gcc
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
# g++
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70
# 数字50,70代表优先级,数字越大优先级越高
如果报错:update-alternatives: error: alternative g++ can’t be master alternative: it is a slave of gcc.
那么得采用方式2
方式2,gcc/g++一起加
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
如果报错:update-alternatives: error: alternative g++ can’t be slave of gcc: it is a master alternative.
那么得采用方式1。
### 3. 手动配置update-alternatives选择gcc/g++版本
```bash
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
出现下图所示提示,输入对应数字就可以切换了,当前是gcc-7,想切换成gcc-6,则输入1再回车。
再输入gcc -v查看版本。
可以看到修改成功,由7换成了6,gcc version 6.5.0 20181026 (Ubuntu 6.5.0-2ubuntu1~16.04)
sudo update-alternatives --remove gcc /usr/bin/gcc-5
ll /usr/bin/gcc*
可以看到蓝色的表示连接文件,绿色的表示可执行文件
其实调用不同版本的gcc/g++,最终调用的就是相应版本的绿色的那个可执行文件
例如:
gcc-6调用的可执行文件就是x86_64-linux-gnu-gcc-6
gcc-7调用的可执行文件就是x86_64-linux-gnu-gcc-7
因此,想要修改系统默认的gcc/g++版本,只需将对应版本的可执行文件直接通过软链接连给/usr/bin/gcc文件就可以。
方式一:
sudo unlink /usr/bin/gcc
方式二:注意不要多打’/',否则会删除实际数据
sudo rm -rf /usr/bin/gcc
sudo ln -s /usr/bin/x86_64-linux-gnu-gcc-7 /usr/bin/gcc
查看结果,发现链接成功
再输入gcc -v,可以看到修改成功。
其实发现三和四本质上都是通过改变软连接的方式来实现版本切换,三是先把不同的软链接通过update-alternatives来统一管理,方便切换。而四是直接通过修改软链接来切换,更加直接。
其实通过update-alternatives可以实现很多程序的版本切换,比如cuda
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.0 10
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.2 20
再切换版本
sudo update-alternatives --config cuda
输入数字切换版本,可以发现能够自由切换成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。