• Ubuntu下GCC的安装以及版本控制


    在Ubuntu下安装GCC和其他一些Linux系统有点不一样。

    方法一:

    该方法超简单:
    sudo apt-get  build-depgcc

    就上面这条命令就可以搞定

    方法二:
    sudo apt-get  install  build-essential

    还是简单,一句命令也可以搞定

    安装完了可以执行
    gcc--version

    的命令来查看版本,输出如下:

    gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)
    Copyright(C)2007FreeSoftwareFoundation,Inc.
    方法三:

    1.下载GCC源码

      wget ftp://mirrors.kernel.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz

    2.解压:

      tar -zxvf gcc-4.9.0.tar.gz

    3.下载编译所需依赖项:

      cd gcc-4.9.0                    //进入解包后的gcc文件夹
    
      ./contrib/download_prerequisites                   //下载依赖项
    
      cd ..                           //返回上层目录

    4.建立编译输出目录:

      mkdir gcc-build-4.9.0

    5.进入输出目录,执行以下命令,并生成makefile文件:

      cd gcc-build-4.9.0
    
      ../gcc-4.9.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
    

    6.编译:

      make -j4

    接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也不少。

    7.安装:

    编译结束以后,我们就可以执行安装了:

      make install

    8.检查版本:

      gcc --version
      或gcc -v


    编译则使用gcc命令。要往下学习首先就得熟悉gcc命令的用法。

    gcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。

    一. 常用编译命令选项
    假设源程序文件名为test.c。

    1. 无选项编译链接
    用法:#gcc test.c
    作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

    2. 选项 -o
    用法:#gcc test.c -o test
    作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

    3. 选项 -E
    用法:#gcc -E test.c -o test.i
    作用:将test.c预处理输出test.i文件。

    4. 选项 -S
    用法:#gcc -S test.i
    作用:将预处理输出文件test.i汇编成test.s文件。

    5. 选项 -c
    用法:#gcc -c test.s
    作用:将汇编输出文件test.s编译输出test.o文件。

    6. 无选项链接
    用法:#gcc test.o -o test
    作用:将编译输出文件test.o链接成最终可执行文件test。

    7. 选项-O
    用法:#gcc -O1 test.c -o test
    作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

    二. 多源文件的编译方法

    如果有多个源文件,基本上有两种编译方法:
    [假设有两个源文件为test.c和testfun.c]

    1. 多个文件一起编译
    用法:#gcc testfun.c test.c -o test
    作用:将testfun.c和test.c分别编译后链接成test可执行文件。

    2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

    用法:
    #gcc -c testfun.c //将testfun.c编译成testfun.o
    #gcc -c test.c //将test.c编译成test.o
    #gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

    以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

    如果你在前后装了两个或者以上版本,有时候gcc -v/-version 会反馈旧的版本。下面将实现gcc各个版本间的选择:

    方法是通过设置各个版本的优先级来达到gcc版本的选择;对于要选择使用的版本,可以将它的优先级设置高些;对于不想使用的版本,赋值一个小的优先级号。这样即可实现各个版本间的切换了。具体操作如下:

    ubuntu系统使用的gcc版本随着发布版本的不同而不同,在编译android系统时不同的版本推荐用不同的gcc去编译,那么可不可以改变系统的gcc来适应android编译环境的需求呢?答案是可以的。

            先看看我们系统用的gcc和g++是什么版本

     

    1 gcc -v

            可以获得的信息如下

     

    1 gcc version 4.4.6 (Ubuntu/Linaro 4.4.6-11ubuntu2)

     

            如果我们想使用gcc4.5怎么办?首先看看有没有安装gcc4.5,

     

    1 ls /usr/bin/gcc*
            结果只有/usr/bin/gcc  /usr/bin/gcc-4.4两个,那么我们需要安装

     

     

    1 sudo apt-get install gcc-4.5 gcc-4.5-multilib g++-4.5 g++-4.5-multilib
            安装好后输入以下指令:

     

     

    1 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50
    2 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 40
            接着输入:

     

     

    1 sudo update-alternatives --config gcc
            会看到如下的选项

     

     

    01 有 3 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。
    02  
    03   选择       路径            优先级  状态
    04 ------------------------------------------------------------
    05 * 0            /usr/bin/gcc-4.4   50        自动模式
    06   1            /usr/bin/gcc-4.4   50        手动模式
    07   2            /usr/bin/gcc-4.5   40        手动模式
    08   3            /usr/bin/gcc-4.6   30        手动模式
    09  
    10 要维持当前值[*]请按回车键,或者键入选择的编号:
            要想用哪个gcc就输入编号吧。

     

            同样也要设置一下g++的

     

    1 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 50
    2 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 40

     

            如果想删除可选项的话可以键入以下指令:

     

    1 sudo update-alternatives --remove gcc /usr/bin/gcc-4.5
            再用gcc -v 来看一下版本是否改变了。

    又一个设置gcc版本切换的文章

    1、手动切换

    设置后,使用时需手动进行切换选择。

    root@ubuntu:~# ls /usr/bin/gcc* -l
    lrwxrwxrwx 1 root root 21 Sep 18 04:42 /usr/bin/gcc -> /etc/alternatives/gcc
    -rwxr-xr-x 1 root root 224544 Apr 15 22:58 /usr/bin/gcc-4.4
    -rwxr-xr-x 1 root root 306200 Apr 15 19:45 /usr/bin/gcc-4.6
    root@ubuntu:~#update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50
    root@ubuntu:~#update-alternatives --install /usr/bin/g++ gcc /usr/bin/g++-4.4 50

    选择方法(根据编译器选择其一):

    root@ubuntu:~#update-alternatives --config gcc
    root@ubuntu:~#update-alternatives --config g++

    参考选择界面:

    root@ubuntu:~# update-alternatives --config g++
    There are 2 choices for the alternative g++ (providing /usr/bin/g++).
    
      Selection    Path              Priority   Status
    ------------------------------------------------------------
    * 0            /usr/bin/g++-4.4   100       auto mode
      1            /usr/bin/g++-4.4   100       manual mode
      2            /usr/bin/g++-4.6   50        manual mode
    
    Press enter to keep the current choice[*], or type selection number: 2
    update-alternatives: using /usr/bin/g++-4.6 to provide /usr/bin/g++ (g++) in manual mode.
    root@ubuntu:~# 

    2、设置优先级自动

    设置后,系统自动根据优先级选择,假设要设置gcc4.4优先于gcc4.6,设置方法如下:

    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 50
    update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
    update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 50
    生活的残酷,让我们习惯了忘记疲倦,一直奔向远方,追寻着自己的梦想。
  • 相关阅读:
    当 Messaging 遇上 Jepsen
    Dubbo 在跨语言和协议穿透性方向的探索:支持 HTTP/2 gRPC
    MongoDB与阿里云达成战略合作,最新数据库独家上线阿里云!
    新网银行微服务转型实践
    微服务架构四大金刚利器
    揭秘2019 双11背后的阿里巴巴超强网络
    揭秘2019双11背后的云网络 – 双11网络架构和洛神系统
    小程序的餐饮之路:从流量捕手到流量塘主的进阶秘籍
    备忘录(Memento)模式
    状态(state)模式
  • 原文地址:https://www.cnblogs.com/L-Arikes/p/3734382.html
Copyright © 2020-2023  润新知