升级gcc版本
clickhouse在新版本又要求使用新的gcc版本了,升级gcc版本是常有的事情了,但是我又经常会忘记具体步骤,现记录如下:
正常步骤
1、下载gcc的源码包
wget http://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz
2、解压安装包
tar -xzvf gcc-10.1.0.tar.gz
3、进入gcc-10.1.0目录
4、运行ownload_prerequisites 脚本,帮助我们下载、配置、安装依赖库
./contrib/download_prerequisiles
注意:如果是离线安装,需要下载好对应的依赖包,分别安装好依赖:gmp,mpfr,mpc,isl。他们之间有依赖关系,注意安装顺序
(1)安装gmp:
make -j8
make install
(2)安装mpfr
./configure --with-gmp=/usr/local/lib //指定gmp的路径
make -j8
make install
(3)安装mpc
./configure --with-gmp=/usr/local/lib --with-mpfr=/usr/local/lib
make -j8
make install
(4)安装isl
./configure --with-gmp=/usr/local/lib
make -j8
make install
如果不想安装这四个依赖包,可以将这些组件包放到gcc目录下,并解压,然后建立软链接。
tar -xf gmp-6.1.0.tar.bz2
tar -xf mpfr-3.1.4.tar.gz
tar -xf mpc-1.0.3.tar.gz
tar -xf isl-0.18.tar.gz
ln -sf gmp-6.1.0 gmp
ln -sf mpfr-3.1.4 mpfr
ln -sf mpc-1.0.3 mpc
ln -sf isl-0.18 isl
注意:离线安装的情况,还需要指定环境变量,否则会出现找不到so文件的情况。
(1)对当前用户有效,重启后失效
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
(2)对所有用户永久有效
vim /etc/ld.so.conf
/usr/local/lib //增加依赖库的lib路径
ldconfig //保存退出
5、建立目录,将所有输出放入该目录
mkdir gcc-build
6、进入目录,并执行如下命令生成makefile
cd gcc-build
../configure --prefix=/usr/local/gcc-10.1 -enable-checking=release -enable-languages=c,c++ -disable-multilib
7、编译
花费时间较长
make -j4
8、安装
make install
9、确认是否安装成功
gcc -v
g++ -v
遇到的坑
1、在make阶段报如下错误:
configure:error:in '/home/software/gcc/gcc-10.1.0/gcc_temp/gcc':
configure:error:C++ preprocessor "/lib/cpp" fails sanity check
See 'config.log' for more details
make[2]:***[configure-stage1-gcc]Error 1
make[2]:Leaving directory '/home/software/gcc/gcc-10.1.0/gcc_temp'
make[1]:***[stage1-bubble]Error2
make[1]:Leaving directory '/home/software/gcc/gcc-10.1.0/gcc_temp'
make:***[all]Error 2
问题原因是缺少必要的C++库,解决方法如下:
yum install gcc-c++
2、cc运行的版本和gcc不一致
这是因为,用gcc查询的时候,对应的是/usr/local/bin/gcc,而cc对应的是/usr/bin/gcc,后者还是之前的老版本,只需要重新设置cc的软连接。
cd /usr/bin
rm /usr/bin/cc
ln -s /usr/local/bin/gcc /usr/bin/cc
3、configure: error: `CXX’ has changed since the previous run
原因是configure没有更新导致,可以根据提示 “run make distclean and/orrm ./config.cache and start over”解决。
make distclean #不是make clean
- 点赞
- 收藏
- 关注作者
评论(0)