zoukankan      html  css  js  c++  java
  • [Linux] 非root安装GCC9.1.0

    说明

    一般Linux系统自带或公共的GCC版本都很低,如目前我们的服务器版本的GCC还停留在gcc-4.9.3,而官网已到达9.2版本(下载http://ftp.gnu.org/gnu/gcc/
    ,有些项目编译时需要更高版本的GCC,这时就需要自己额外安装一个了。

    网上关于非 root用户的教程有很多,但大多数都很旧且不靠谱,我找到了几个比较实用的,总结一下,亲测有效。

    安装GCC主要依赖三个库:GMP, MPFRMPC,另还有个ISL库(不知是否是必需)。之前的旧版本可能需要手动依次安装这些依赖库,但较新的版本其实只需要在GCC目录下运行./contrib/download_prerequisites命令就可以自动下载这几个组件,也不用担心版本问题。

    另外一点和其他软件不同的地方在于,GCC不能直接在其源码中编译,而是在它的目录下新建一个文件夹,然后进入这个文件夹配置并编译安装。了解了这两点,安装GCC就一路畅通,不过编译很慢,耗时2小时以上。
    解压后安装依赖

    安装

    假设我现在的路径为:/path/to/software

    wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
    tar -xvf gcc-9.1.0.tar.gz
    mkdir gcc9  #作为安装路径
    cd gcc-9.1.0
    ./contrib/download_prerequisites 
    #等待安装好依赖
    mkdir gcc-9.1.0 #作为编译路径,不能直接在源码中编译
    ../configure --disable-checking --enable-languages=c,c++ --disable-multilib --prefix=/path/to/software/gcc9 --enable-threads=posix
    #经测试,用此gcc版本编译R时,会报错无Fortran语言,因此这里加入该语言,gcc编译的语言还有很多,可以写all,但会耗时,更多内容参考官方文档。
    #../configure --disable-checking --enable-languages=c,c++,fortran --disable-multilib --prefix=/path/to/software/gcc9 --enable-threads=posix
    make -j32 && make install
    

    安装成功应该包括以下文件目录:
    image.png

    添加到环境变量,就能覆盖旧版本了。

    #路径要在环境变量前
    export PATH=/path/to/software/gcc9/bin:/path/to/software/gcc9/lib64:$PATH
    export LD_LIBRARY_PATH=/path/to/software/gcc9/lib/:$LD_LIBRARY_PATH
    

    补充环境变量设置

    1.gcc/g++等程序本身的路径
    export PATH=$PATH:/install/bin
    #注:/install为安装目录,下同
    
    2.gcc头文件路径
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:/install/include
    
    3.g++头文件路径
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/install/include
    
    4.动态链接库路径
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/install/lib64
    
    5.静态库路径
    export LIBRARY_PATH=$LIBRARY_PATH:/install/lib
    

    GCC编译过程

    共四步,以编译C语言程序(.c)为例:

    • 预编译:预处理生成.i文件。
    • 编译:编译成汇编语言,生成.S文件。
    • 汇编:汇编后生成目标文件.o文件。
    • 链接:将各个模块的.o文件链接起来生成一个可执行文件。

    Ref: http://www.xieqiang.site/2017/07/31/install-gcc-5.4-without-root/
    https://blog.csdn.net/u011719045/article/details/82317695
    https://www.cnblogs.com/freeopen/p/5482902.html
    https://www.cnblogs.com/jack-hzm/p/9978440.html

  • 相关阅读:
    C#学生管理系统/学习
    ESC socket通信不通问题
    JavaWeb/ No 'Access-Control-Allow-Origin' header is present on the requested resource
    JavaWeb/ forward跳转到jsp页面后出现中文乱码问题
    JavaWeb/ MVC模式的初次实践
    docker搭建常用应用以及遇到的坑
    突验 8 进程通信
    实验七 信号
    实验6进程基础
    实验5 shell脚本编程
  • 原文地址:https://www.cnblogs.com/jessepeng/p/11674780.html
Copyright © 2011-2022 走看看