• C++ | 无root权限在centOS7.9上安装新版本gcc编译器


    1. download

    http://ftp.gnu.org/gnu/gcc/
    http://ftp.gnu.org/gnu/gcc/gcc-12.1.0/

    $ cd /home/wangjl/Downloads/
    $ wget http://ftp.gnu.org/gnu/gcc/gcc-12.1.0/gcc-12.1.0.tar.gz
    $ tar zxvf gcc-12.1.0.tar.gz
    
    • 1
    • 2
    • 3

    2. 无 root 安装

    这里由于没有root权限,需要把 --prefix=后的路径改成自己路径,如/home/users/liqiang/gcc-9.3.0

    $ cd gcc-12.1.0
    $ ./contrib/download_prerequisites
    
    gmp-6.2.1.tar.bz2: OK
    mpfr-4.1.0.tar.bz2: OK
    mpc-1.2.1.tar.gz: OK
    isl-0.24.tar.bz2: OK
    All prerequisites downloaded successfully.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    前面的句子是否有用?不确定。

    $ mkdir build
    $ cd build
    $ ../configure --prefix=/home/wangjl/software/gcc-12.1.0 --enable-shared --enable-threads=posix --enable-languages=c,c++,fortran --disable-multilib
    $ make -j64 #多线程编译,否则巨慢! 20:25-->20:45
    
    $ make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最后提示:

    Libraries have been installed in:
       /home/wangjl/software/gcc-12.1.0/lib/../lib64
    
    • 1
    • 2

    3. 加入环境变量

    打开.bashrc
    $ vim ~/.bashrc

    添加以下三条,需要把路径改成自己的

    export PATH=~/software/gcc-12.1.0/bin:$PATH
    export LD_LIBRARY_PATH=~/software/gcc-12.1.0/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=~/software/gcc-12.1.0/lib64:$LD_LIBRARY_PATH
    
    • 1
    • 2
    • 3

    激活环境
    $ source ~/.bashrc

    查看版本

    $ gcc --version
    
    gcc (GCC) 12.1.0
    Copyright (C) 2022 Free Software Foundation, Inc.
    
    • 1
    • 2
    • 3
    • 4

    4.清理

    $ cd ../..
    $ mv gcc-12.1.0 gcc-12.1.0-Can-Delete
    
    • 1
    • 2

    过几天没啥异常,这个就可以删除了。

    5.测试

    C++源码文件

    $ cat main.cpp 
    #include 
    using namespace std;
    int main()
    {
        cout << "Hello, world! from c++" << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用c++11标准编译,两个版本的编译器都正常工作。

    $ /usr/bin/g++ -g -Wall -std=c++11 main.cpp
    $ ./a.out 
    Hello, world! from c++
    
    $ g++ -g -Wall -std=c++11 main.cpp
    $ ./a.out 
    Hello, world! from c++
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用c++17标准,只有新的g++可以编译:

    $ /usr/bin/g++ -g -Wall -std=c++17 main.cpp
    g++: error: unrecognized command line option ‘-std=c++17’
    
    $ g++ -g -Wall -std=c++17 main.cpp
    $ ./a.out 
    Hello, world! from c++
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    == End ==

  • 相关阅读:
    ESLint+Prettier+VSCode编程规范
    git hook
    pandas 将一行拆分为多行,将多行合并为一行
    Go源码实现使用多线程并发下载大文件的功能
    Linux:rpm与yum(内含:1.rpm介绍+2.卸载rpm包+3.安装rpm(应用案例)+4.yum(应用案例))
    zabbix第三方邮箱警告配置
    My Fortieth Page - 二叉搜索树中的众树 - By Nicolas
    你如何看待抖音的中视频伙伴计划的?
    多维高斯分布(多元正态分布)的概率密度函数和最大似然估计
    什么是服务器集群?海外服务器集群的优势?
  • 原文地址:https://blog.csdn.net/wangjunliang/article/details/125992231