目录

准备

安装步骤

用update-alternatives 确定gcc没有在update-alternatives中注册

通过whereis 和ll 命令确定当前gcc的路径,以及属性(是软连接还是真实文件)

安装gcc7.5.0

安装m4 1.4.16

安装bison libtool gettext texinfo flex

下载 gcc7.5 mpc1.10 mpfr4.0.2 gmp6.1.2源码

解压以上4个文件

在gmp文件夹内,执行如下三条指令,完成gmp安装

在mpfr文件夹内,执行如下指令,完成mpfr安装

在mpc文件夹内,执行如下指令完成mpc安装

在gcc-7.5.0文件夹内使用configure配置

将/usr/local/lib路径加入/etc/ld.so.conf,并ldconfig

在gcc-7.5.0文件夹内make

在gcc-7.5.0文件夹内 sudo make install

使用update-alternatives切换编译器版本

检查PATH环境变量

使用(update)Alternatives配置gcc g++版本

初始状态

 向/usr/sbin/添加一个gcc的软连接

向/usr/sbin/添加g++的软连接

准备

操作系统中标麒麟

操作系统已经安装了gcc 4.9.3(不一定非要4.9.3,但是要有编译器),且支持c++编译(这点很重要,在ubuntu12.04, 14.04上,预装编译器不支持g++,于是就必须先安装build-essential和g++才能走下去

安装步骤

用update-alternatives 确定gcc没有在update-alternatives中注册

update-alternatives --display gcc

 显示没有内容,说明gcc没有在update-alternatives中注册

通过whereis 和ll 命令确定当前gcc的路径,以及属性(是软连接还是真实文件)

whereis gcc
cd /usr/bin
ll gcc

麒麟 x86 mongodb 编译 麒麟系统安装gcc_make

 ll gcc的输出显示“-rwxr-xr-x”,以-开头,说明是真实文件,不是软连接。

安装gcc7.5.0

安装m4 1.4.16

参见我以前的博客

安装bison libtool gettext texinfo flex

按次序安装,参见我前面的博客

下载 gcc7.5 mpc1.10 mpfr4.0.2 gmp6.1.2源码

解压以上4个文件

在gmp文件夹内,执行如下三条指令,完成gmp安装

./configure 
make 
sudo make install

在mpfr文件夹内,执行如下指令,完成mpfr安装

./configure 
make 
sudo make install

在mpc文件夹内,执行如下指令完成mpc安装

./configure 
make 
sudo make install

在gcc-7.5.0文件夹内使用configure配置

./configure --prefix=/opt/gcc-7.5.0 --enable-checking=release --enable-bootstrap --enable-languages=c,c++ --disable-multilib

将/usr/local/lib路径加入/etc/ld.so.conf,并ldconfig

前面安装的gmp mpfr mpc等, 都生成了.so库,放置在/usr/local/lib中。编译gcc7.5.0将用到这些库,但是前提是操作系统能找到它们的位置。让操作系统直到它们位置的办法,已有描述:先把so库所在路径加入ld.so.conf,然后ldconfig

麒麟 x86 mongodb 编译 麒麟系统安装gcc_软连接_02

注意,以前我以为,假如在生成mpc mpfr gmp的so文件之前,我已经将/usr/local/bin加入l.so.conf并且ldconfig过,我就不需要在生成so之后再重复这个操作了。这个想法不对。尽管路径早已经写入ld.so.conf,但是新增的so 还是要在ldconfig之后生效。

在gcc-7.5.0文件夹内make

在gcc-7.5.0文件夹内 sudo make install

至此gcc安装完毕,安装路径在/opt/gcc-7.5.0

使用update-alternatives切换编译器版本

 但是我的虚拟机实际情况与上述帖子的情况又有区别:

上面的帖子里,/usr/bin里面是gcc的软连接,所以帖子作者可以通过改变这个软连接来指向不同的真实gcc。但我这里/usr/bin的gcc是真实文件,不能被update-alternatives改变。于是采取如下办法:

检查PATH环境变量

麒麟 x86 mongodb 编译 麒麟系统安装gcc_麒麟 x86 mongodb 编译_03

 可见,/usr/bin出现在PATH里面。但是并不是第一个。linux执行程序时,会搜索PATH的各个路径,并且是从PATH的第一个路径搜索。利用这个特点,可以把gcc的软连接建立在PATH里更靠前的路径下,比如/usr/sbin。

使用(update)Alternatives配置gcc g++版本

初始状态

gcc版本4.9.3 、/usr/sbin/下面没有gcc

麒麟 x86 mongodb 编译 麒麟系统安装gcc_c++_04

 向/usr/sbin/添加一个gcc的软连接

sudo alternatives --install /usr/sbin/gcc gcc /usr/bin/gcc 40903

麒麟 x86 mongodb 编译 麒麟系统安装gcc_make_05

同理,再添加gcc-7.5的软连接 

这里要注意几点:

1) 在中标麒麟上不支持update-alternatives,但是支持alternatives

2) alternatives --install用来将不同版本的程序按照不同的优先级注册下来。其语法如下:

sudo alternatives --install 软链接路径 程序名 源程序路径 优先级

这里的名称,就是你调用gcc --version时用的"gcc" 

3) 优先级这一项,必须是一个整数,且开头不能是0.数值越大,优先级越高

4) 完成install之后,配置不会立刻生效,最好重启计算机。

向/usr/sbin/添加g++的软连接

麒麟 x86 mongodb 编译 麒麟系统安装gcc_make_06

麒麟 x86 mongodb 编译 麒麟系统安装gcc_麒麟 x86 mongodb 编译_07