Linux【11】-软件安装7-linux下编译安装gcc

一、gcc库简介

GCC 原来代表“GNU C Compiler”的意思。自从面世后,GCC 逐渐扩充、发展,现在不仅仅支持C语言,还支持其他很多语言,包括 C++、Ada、Objective-C、Fortran 和 Java 等。因此,GCC 的意思被重新定义为“GNU Compiler Collection”,也即“GUN 编译器套件”。

二、gccc库安装(如果有版本要求,可以直接跳过这个部分)

yum intall gcc

报错:

--> Finished Dependency Resolution
Error: Package: glibc-headers-2.17-260.el7_6.4.x86_64 (updates)
           Requires: kernel-headers >= 2.2.1
Error: Package: glibc-headers-2.17-260.el7_6.4.x86_64 (updates)
           Requires: kernel-headers
 You could try using --skip-broken to work around the problem

解决办法:

1.查看自己服务器的 kernel版本号

[root@c02 bin]# rpm -q kernel
kernel-3.10.0-693.el7.x86_64

2.下载对应的 kernel-headers 版本

wget -c ftp://ftp.pbone.net/mirror/ftp.centos.org/7.6.1810/virt/x86_64/xen-48/kernel-headers-4.9.75-29.el7.x86_64.rpm

3.安装 rpm 包

[root@c02 tmp]# rpm -Uvh kernel-headers-4.9.75-29.el7.x86_64.rpm
warning: kernel-headers-4.9.75-29.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 61e8806c: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-headers-4.9.75-29.el7     ################################# [100%]

4.完成!!!可以继续 yum 下去了。。。

三、gcc的升级与安装(完整版,指定版本的安装)

yum update gcc 

使用yum安装是不可能了,各大仓库也没有,只能自己编译安装了。

gcc 各种版本选择:https://ftp.gnu.org/gnu/gcc/ 我选择的是最新版的:https://ftp.gnu.org/gnu/gcc/gcc-9.2.0/

1.下载解压

cd /data/software/gcc
wget -c https://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz
tar -xzvf gcc-9.2.0.tar.gz  

2.下载编译依赖

cd gcc-9.2.0
./contrib/download_prerequisites   

3.生成Makefile文件

mkdir gcc-build-9.2.0
cd gcc-build-9.2.0
../configure -enable-checking=release -enable-languages=c,c++,fortran -disable-multilib

(第一遍安装的时候,因为fortran没有,所以gfortran命令没安装上。要编译那个语言,就需要在enable-languages后面加上哈)

4.编译

make -j15
15表示使用15个核心,根据你的CPU来指定。也可不指定任何参数。(这一步比较耗时间)

报错:

make[2]: Leaving directory `/mnt/nfs/data/software/gcc/gcc-9.2.0/gcc-build-9.2.0'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/mnt/nfs/data/software/gcc/gcc-9.2.0/gcc-build-9.2.0'
make: *** [all] Error 2

解决:

yum install -y glibc-headers gcc-c++ 

然后,接着编译:

make -j15

5.安装

sudo make install

6.验证

gcc -v

还有原来的版本,重启后,再验证OK

7.测试 (这里木有写测试)

写个测试的程序测试一下:

g++ -std=c++11 -o testCpp11  testCpp11.cpp

顺利编译成功,执行./testCpp11提示:

./testCpp11: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./testCpp11)
./testCpp11: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./testCpp11)
./testCpp11: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./testCpp11)

看来动态库并没有更新。

8.更新动态库

查看动态库的版本:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

确实没有更新,默认情况下,会安装在如下目录:

/usr/local/lib64/libstdc++.so.6.0.27

简单了,将原来的库替换为上面的就可以了:

rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.27 /usr/lib64/libstdc++.so.6

然后再查看动态库的版本:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

结果

GLIBCXX_3.4.22

这就是刚刚安装的版本,再执行一下测试程序./testCpp11,成功!

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学