zoukankan      html  css  js  c++  java
  • CentOS7编译和安装GCC7.5

    CentOS7编译和安装GCC7.5

    一、    环境介绍:

    CentOS7

    虚拟机连上了互联网(为什么要强调这点呢,因为CentOS7每次进入系统,都需要手动点击右上角的Connect,才能连上互联网。在非联网情况下,会出现各种问题,影响我们的判断和安装)

    二、    为什么是GCC7.5

    CentOS7 自带的 gcc/g++ 版本是 4.8,如果没有安装,可以通过 yum 命令安装。

    由于 gcc/g++ 4.8 完全支持 C++ 11,支持部分 C++ 14,不支持 C++ 17,而完全支持 C++ 17 的是 g++ 7 及以上版本:

    个人不太建议安装GCC8.X,太新的编译器,所需要的依赖包、各种环境都需要最新版本,安装过程中会出现很多问题。而且还不一定那么稳定。

    本着够用就好的原则,GCC7.5完全支持C++17,是最理想的选择。

    若干参考链接:

    https://blog.csdn.net/analogous_love/article/details/97823301

    https://my.oschina.net/panquanxing/blog/3070964

    三、    安装步骤

    3.1更新系统以及安装若干相关的包(包括gcc  gcc-c++)

    root权限下面进行这些操作

    sudo yum -y update
    
    sudo yum -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make
    
    sudo yum -y install zlib
    
    sudo yum -y install zlib-devel

    3.2下载GCC7.5的工程文件(下面的步骤,建议在非root权限下操作)

    wget  https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz
    
    tar  -zxvf  gcc-7.5.0.tar.gz
    
    cd  gcc-7.5.0

    3.3安装若干gcc的依赖包

    ./contrib/download_prerequisites
    
    mkdir  gcc-build-7.5
    
    cd  gcc-build-7.5

    3.4生成Makefile文件(下面这个是一行,请直接复制粘贴)

    ../configure --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --enable-gnu-indirect-function --with-tune=generic --disable-multilib   

    3.5编译(这个编译比较耗时)

    make  -j4

    3.6安装(需要root权限)

    make  install 

    3.7查看gcc版本

    gcc  -v

    3.8动态库 libstdc++.so.6 的更新(在root权限下进行下面的操作)

    检查动态库:

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

    从输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。

    执行以下命令,查找编译gcc时生成的最新动态库:(在root权限下进行操作,后面都是,不再赘述)

    find / -xdev -name "libstdc++.so*"

    你会看到有很多目录

     

    拷贝最新编译的libstdc++.so.6.0.24 到 /usr/lib64目录(如果你前面都是按照步骤做了相同的配置,下面的步骤就是,直接执行这些命令,这里给的都是绝对路径。写这么多就是让读者看得明白。)

    cp  /usr/local/lib64/libstdc++.so.6.0.24  /usr/lib64/

    删掉旧的libstdc++.so.6(这是一个软链接)

    rm -rf /usr/lib64/libstdc++.so.6

    创建新的libstdc++.so.6软链接

    ln -s /usr/local/lib64/libstdc++.so.6.0.24   /usr/lib64/libstdc++.so.6

    3.9编辑环境变量(建议在非root权限下操作

    vi ~/.bash_profile

    在PATH里面追加 /usr/local/bin

    添加 LD_LIBRARY_PATH、CC、CXX

    导出 这些路径

    这里是我的 .bash_profile

    PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin
    LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
    CC=/usr/local/bin/gcc
    CXX=/usr/local/bin/g++
    
    export PATH
    export LD_LIBRARY_PATH
    export CC
    export CXX

    3.10让当前的配置环境立即生效:

    source ~/.bash_profile

    四、    跑一个案例Hello.cpp

    ////////////  g++ hello.cpp -std=c++17 -pthread -o abc.bin
    
    #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;
    }

    编译

    g++ hello.cpp -std=c++17 -pthread -o abc.bin

    如果可以正常运行,那就应该OK了。

    如果不能正常运行,麻烦重新再阅读这篇文章,从头到尾,重新操作一遍。(把解压和编译后的 gcc工程删了,重新解压、配置、编译)

  • 相关阅读:
    《Linux C一站式学习》第七章 结构体
    《Linux C一站式学习》第三章 简单的函数
    《Windows程序设计》第一章 起步
    CSS在线课程学习笔记
    《Windows程序设计》第三章 窗口和消息
    window.open与window.showModalDialog中主页面与从页面间的通信(原创) 中庸
    php文件实现将大文件导入到mysql数据库中
    我为何爱读代码?你为何也应当爱?
    解决phpMyAdmin导入mysql数据库超过2M的问题
    对linux交换分区swap的一些认识总结
  • 原文地址:https://www.cnblogs.com/music-liang/p/12900457.html
Copyright © 2011-2022 走看看