中标麒麟高级服务器操作系统 V7.6 升级安装 GCC-8.5.0 编译工具

 由于中标麒麟高级服务器操作系统 V7.6 默认的 gcc/g++版本为 4.8.5,鉴于 gcc/g++ 4.8.5 完全支持 C++11,支持部分 C++14,不支持 C++17,而 gcc/g++ 8.4及以上版本才能完全支持 C++17 编译标准。那么当项目应用需要使用到 C++17 标准的一些特性时,使用系统自带的 gcc/g++ 4.8.5 版本是无法满足需求的,这个时候我们就需要手动编译升级 gcc/g++编译工具。

二、安装环境

操作系统版本:中标麒麟高级服务器操作系统 V7U6-x86_64操作系统自带 GCC 版本:gcc 4.8.5
待升级的 GCC 版本:gcc 8.5.0三、安装步骤
1. 编译环境准备

[root@localhost ~]# yum -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make

2. 获取 GCC-8.5.0 源码包下载链接:gcc-8.5.0

[root@localhost ~]# mkdir /opt/gcc-8.5.0 [root@localhost ~]# cd /opt/gcc-8.5.0/

[root@localhost gcc-8.5.0]# cp /root/gcc-8.5.0.tar.gz . [root@localhost gcc-8.5.0]# tar -zxvf gcc-8.5.0.tar.gz [root@localhost gcc-8.5.0]# cd gcc-8.5.0

3. 安装 GCC 依赖包

[root@localhost gcc-8.5.0]# ./contrib/download_prerequisites

4. 编译安装 GCC

(1) 生成 Makefile 文件

[root@localhost gcc-8.5.0]# ./configure --prefix=/usr/local/gcc

--enable-bootstrap --disable-multilib

(2) 编译 GCC

[root@localhost gcc-8.5.0]# make -j 4

注意:这里使用-j 参数是利用多核 CPU 快速编译,具体可以通过命令“cat

/proc/cpuinfo| grep “processor”| wc -l” 来查看最高设置多少个核心来进行编译工作。编译过程时间较长,请耐心等待。

(3) 安装 GCC

[root@localhost gcc-8.5.0]# make install

(5) 修改 PATH 环境变量

注意:这里只修改当前用户下的环境变量。 [root@localhost ~]# vim ~/.bash_profile

(6) 使 PATH 环境变量生效

[root@localhost ~]# source ~/.bash_profile

(7) 确认当前用户下的 GCC 版本

[root@localhost ~]# gcc --version

[root@localhost ~]# g++ --version

四、验证
编译一个 hello.cpp [root@localhost ~]# vim hello.cpp
#include <iostream>#include <thread>#include <unistd.h>#include
<vector>using namespace std;void MyThread(int iPara){ cout<<"MyThread----: "<< iPara <<endl; sleep(1); ///The para is Seconds}
int main(){

thread threadDemo(MyThread, 123); cout <<" start"<<endl;
threadDemo.join();

cout <<" end"<<endl;

vector<int> vecTest; vecTest.clear(); vecTest.push_back(10); vecTest.push_back(20); vecTest.push_back(30);

 

vecTest.push_back(40); vecTest.push_back(50); vecTest.push_back(1); vecTest.push_back(2);

for(auto &changeValue:vecTest)

{

changeValue = changeValue * 2;

}

cout<<"display new value:"<<endl; for(auto newValue:vecTest)

{

cout << newValue<<endl;

}

return 0;}

[root@localhost ~]# g++ hello.cpp -std=c++17 -pthread -o hello.bin

[root@localhost ~]# ./hello.bin

这里我们可以看到,编译没有问题,但是运行编译生成的可执行文件时报错了。这是因为系统仍在使用旧的 libstdc++.so.6 库文件,所以需要手动更新这个库文件。步骤如下:

(1) 先查看当前 libstdc++.so.6 库文件是否支持 CXXABI_1.3.9 和 GLIBCXX_3.4.22;

[root@localhost ~]# strings /lib64/libstdc++.so.6 | grep CXXABI_1.3.9

[root@localhost ~]# strings /lib64/libstdc++.so.6 | grep GLIBCXX_3.4.22

备注:上述命令执行结果没有输出信息,代表不支持 CXXABI_1.3.9 和 GLIBCXX_3.4.22。
(2) 搜索新编译安装的 GCC 的 libstdc++.so.6 库文件;

[root@localhost ~]# find / -name libstdc++.so

(3) 拷贝新的 libstdc++.so.6 库文件到操作系统/lib64/目录中,并重新生成链接库文件;

[root@localhost ~]# cp

/opt/gcc-8.5.0/gcc-8.5.0/x86_64-pc-linux-gnu/libstdc+± v3/src/.libs/libstdc++.so /lib64/

[root@localhost ~]# ln -sf /lib64/libstdc++.so /lib64/libstdc++.so.6

(4)重新运行 hello.bin 二进制文件,可以正常执行。

[root@localhost ~]# ./hello.bin

 

转载自:https://blog.csdn.net/ShenSeKyun/article/details/126280142

posted @ 2023-03-17 15:00  李朋_Wechat  阅读(382)  评论(0编辑  收藏  举报