Linux之编译gcc-9.1.0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之编译gcc-9.1.0相关的知识,希望对你有一定的参考价值。

本来是要二进制安装mariadb10.3.15(此版本自带Galery Cluster,内置模块)

But下错了版本,下载了带systemd服务启动程序的包,

然后按照平时的做法,解压,生成数据库文件,

这时候提示什么来着,提示的好像是没有GLIBCXX_3.4.20和GLIBCXX_3.4.21,

于是慢慢爬坑路,gcc版本好像不够。就去官方下载了最新的gcc-9.1.0,试着编译下:

编译好的打包文件特此共享,下面是编译过程,能用的话,有需要的朋友可以去下载。

百度网盘
链接:https://pan.baidu.com/s/1Dks42DwnMfRV4iVHk19eYg
提取码:xug9
有效期:7天

下列命令可自行改为脚本

# wget http://mirrors.concertpass.com/gcc/releases/gcc-9.1.0/gcc-9.1.0.tar.xz
# tar -xvf gcc-9.1.0.tar.xz
# cd gcc-9.1.0
# ./contrib/download_prerequisites
# cd ..
# mkdir gcc-build-9.1.0
# cd gcc-build-9.1.0
# ../gcc-9.1.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# make -j4
# make install

特此说明,这个东西编译真的很费时间,编译了不下两个小时,我的天呐噜,编的我都慌了。好在最后的mariadb可以生成数据库目录内的数据了,TMT



源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。

方法如下(下列和上面的命令并不呼应,只是个教程,仅供替换时做相应的参考):

# 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.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
从以上输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。

执行以下命令,查找编译gcc时生成的最新动态库:
# find / -name "libstdc++.so*"
输出如下:
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21  //最新动态库
/home/gcc-5.2.0/gcc-temp是升级gcc时的输出目录。

将上面的最新动态库libstdc++.so.6.0.21复制到/usr/lib64目录下:
# cp /home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64

复制后,修改系统默认动态库的指向,即:重建默认库的软连接。
切换工作目录至/usr/lib64:
# cd /usr/lib64删除原来软连接:
# rm -rf libstdc++.so.6将默认库的软连接指向最新动态库:
# ln -s libstdc++.so.6.0.21 libstdc++.so.6

默认动态库升级完成。重新运行以下命令检查动态库:
# 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.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

以上是关于Linux之编译gcc-9.1.0的主要内容,如果未能解决你的问题,请参考以下文章

C++ 解释器/控制台/片段编译器

Hadoop之Linux源代码编译

是否可以动态编译和执行 C# 代码片段?

FFmpeg之Linux下编译与调试

Notepad++编辑器——Verilog代码片段直接编译

linux基础之内核编译