将 Ubuntu 12.04 上的 GCC 4.6.3 升级到 4.8.2,并切换到新的编译器

Posted

技术标签:

【中文标题】将 Ubuntu 12.04 上的 GCC 4.6.3 升级到 4.8.2,并切换到新的编译器【英文标题】:Upgrade GCC 4.6.3 on Ubuntu 12.04 to 4.8.2 with swtiching to new compiler 【发布时间】:2015-01-15 00:43:26 【问题描述】:

我想从 g++ 4.6.3 升级到 4.8,然后使用新的编译器。

注意:下面的make 失败!

../.././libcc1/findcomp.cc:20:20: fatal error: config.h: No such file or directory compilation terminated.

来自this 回复:

sudo apt-get install libmpfr-dev libgmp3-dev libmpc-dev flex bison

svn checkout svn://gcc.gnu.org/svn/gcc/trunk

cd trunk

./configure --prefix=/opt/gcc-4.8.2/usr/local/gcc-4.8.2 --enable-languages=c,c++

make

make install

编译器将放置在 /opt/ 目录中,因此您必须从那里使用它。

我的问题是(如果您认为上述步骤有误,请说明):

    现在有更简单的方法吗? 如何执行最后一步?我的意思是,我想我可以做 /opt/g++-4.8 或 一些东西,但是我必须做些什么才能让我的系统看到 当我用 g++ 编译时编译器?

相关question。

【问题讨论】:

添加符号链接或编写脚本以适应不同的编译器如何?我在日常生活中同时使用这两种方式 我该怎么做?你能告诉我@HowChen,也许有答案吗?目前我在make进程中,所以不能马上测试。 你的意思是你只需要运行g++,它就会使用你最新的g++编译器吗?或者您需要一种简单的方法来安装新的g++ 我想要的是使用安装的新编译器而不是旧的@HowChen。 我以两种方式更新我的答案 【参考方案1】:

我只是展示一个想法,如何通过在 shell 中切换来适应不同的编译器

我根据我的安装为你提供我的解决方案,前提是你已经知道你最新的g++ 和以前的g++s 版本在哪里。我想这样做:

#I create some color for $PS1 use
black="\[\033[1;30m\]"
red="\[\033[1;31m\]"
green="\[\033[1;32m\]"
yellow="\[\033[1;33m\]"
blue="\[\033[1;34m\]"
purple="\[\033[1;35m\]"
cyan="\[\033[1;36m\]"
white="\[\033[1;37m\]"
coloroff="\[\033[0m\]"
highlight="\[\033[1m\]"
underline="\[\033[4m\]"
twinkle="\[\033[5m\]"
reverse="\[\033[7m\]"
unvisible="\[\033[8m\]"

#you can add some default path, I just list my daily use path for you, you need modify them
DEFAULT_PATH="/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$HOME/bin"

#default setting, I usually use gcc, so you need modify to g++
function default()
export PATH="$DEFAULT_PATH"
PS1="\[\033]2;\u@\h:\w\a\]$red[GNU-GCC]$blue\u@\h:$coloroff\w\n-> "
gcc_ver=`gcc --version | head -n 1`


#you can add more compiler, even some dedicate old version of g++, just copy my function and modify the bin path

#arm-linux-gcc setting, I also use cross compiler
function armlinuxgcc()
export PATH="$DEFAULT_PATH"
PS1="\[\033]2;\u@\h:\w\a\]$red[ARM-Linux-GCC]$blue\u@\h:$coloroff\w\n-> "
arm_linux_gcc_ver=`arm-linux-gnueabi-gcc-4.7 --version | head -n 1`


#I also use dedicate compiler provide by arm
function RVCT22B616()
#for RVCT2.2
export PATH="$DEFAULT_PATH:$HOME/Software/RVS22-BN-00000-r2p2-01rel0/rvds_2_2_1_dist241_linux/RVCT/Programs/2.2/503/linux-pentium"
export RVCT22INC="$HOME/Software/RVS22-BN-00000-r2p2-01rel0/rvds_2_2_1_dist241_linux/RVCT/Data/2.2/503/include/unix"
export RVCT22LIB="$HOME/Software/RVS22-BN-00000-r2p2-01rel0/rvds_2_2_1_dist241_linux/RVCT/Data/2.2/503/lib"
PS1="\[\033]2;\u@\h:\w\a\]$red[ARM2.2B616]$blue\u@\h:$coloroff\w\n-> "
armcc_ver=`armcc --vsn | head -n 1`
#end of RVCT2.2


function RVCT31B1055()         
#for RVCT3.1
export PATH="$DEFAULT_PATH:$HOME/Software/RVP31-PA-00001-r3p1-09rel0/linux-pentium"
export RVCT31INC="$HOME/Software/RVP31-PA-00001-r3p1-09rel0/include/unix"
export RVCT31LIB="$HOME/Software/RVP31-PA-00001-r3p1-09rel0/lib"
PS1="\[\033]2;\u@\h:\w\a\]$red[ARM3.1B1055]$blue\u@\h:$coloroff\w\n-> "
armcc_ver=`armcc --vsn | head -n 1`
#end of RVCT3.1


function RVCT41B894()
#for RVCT4.1
export PATH="$DEFAULT_PATH:$HOME/Software/RVP41-PA-00001-r4p1-05rel0/standard-linux-pentium-rel/linux-pentium"
export ARMCC41INC="$HOME/Software/RVP41-PA-00001-r4p1-05rel0/standard-linux-pentium-rel/include/unix"
export ARMCC41LIB="$HOME/Software/RVP41-PA-00001-r4p1-05rel0/standard-linux-pentium-rel/lib"
PS1="\[\033]2;\u@\h:\w\a\]$red[ARM4.1B894]$blue\u@\h:$coloroff\w\n-> "
armcc_ver=`armcc --vsn | head -n 1`
#end of RVCT4.1


function DS5B94()
#for DS-5
export PATH="$DEFAULT_PATH:/usr/local/DS-5/bin/"
export ARMCC5INC="/usr/local/DS-5/include/"
PS1="\[\033]2;\u@\h:\w\a\]$red[ARM5.0B94]$blue\u@\h:$coloroff\w\n-> "
armcc_ver=`armcc --vsn | head -n 1`
#end of DS-5

然后,让用户可以选择这些编译器:

default
function sel_env()
echo "**************************"
echo "* Switch Compile env:"
echo "* 1. ARMCC 2.2 Build[616]"
echo "* 2. ARMCC 3.1 Build[1055]"
echo "* 3. ARMCC 4.1 Build[894]"
echo "* 4. ARMCC 5.0 Build[94]"
echo "* 5. ARM-Linux-GUNEABI-GCC"
echo "* 6. GCC"
echo "**************************"
read choose;
#select choose in "1" "2" "3"; do
    case $choose in
        1) RVCT22B616
            echo "CC -> $armcc_ver"
            echo "Compile Firmware and Boot Core";;
        2) RVCT31B1055
            echo "CC -> $armcc_ver"
            echo "Compile Boot Core";;
        3) RVCT41B894
            echo "CC -> $armcc_ver"
            echo "Compile Firmware";;
        4) DS5B94
            echo "CC -> $armcc_ver"
            echo "Compile Firmware";;
        5) armlinuxgcc 
            echo "CC -> $arm_linux_gcc_ver"
            echo "Corss compile";;
        *) default
            echo "CC -> $gcc_ver";;
    esac
#done

现在,在你打开你的终端后,首先source这个环境文件,或者在你的$HOME中的.bashrc文件中添加这个操作,然后输入sel_env。如果你只是source这个文件,我会告诉你结果:

how@ubuntu-sw:~/Work/.env$ ls
work.env
how@ubuntu-sw:~/Work/.env$ source work.env
[GNU-GCC]how@ubuntu-sw:~/Work/.env
-> ls
work.env
[GNU-GCC]how@ubuntu-sw:~/Work/.env
-> sel_env 
**************************
* Switch Compile env:
* 1. ARMCC 2.2 Build[616]
* 2. ARMCC 3.1 Build[1055]
* 3. ARMCC 4.1 Build[894]
* 4. ARMCC 5.0 Build[94]
* 5. ARM-Linux-GUNEABI-GCC
* 6. GCC
**************************

如果我选择1,例如:

[GNU-GCC]how@ubuntu-sw:~/Work/.env
-> sel_env 
**************************
* Switch Compile env:
* 1. ARMCC 2.2 Build[616]
* 2. ARMCC 3.1 Build[1055]
* 3. ARMCC 4.1 Build[894]
* 4. ARMCC 5.0 Build[94]
* 5. ARM-Linux-GUNEABI-GCC
* 6. GCC
**************************
1
ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 616]
CC -> 
Compile Firmware and Boot Core
[ARM2.2B616]how@ubuntu-sw:~/Work/.env
->

希望此选项可以在您使用多个编译器时为您提供帮助。如果你觉得这种方式太过分了,我建议你也可以使用符号链接,因为你将编译器安装到/opt,通常这个/opt文件夹应该在你的系统定义的路径中。但是你需要以某种方式像g++_withyour_version一样运行,然后你可以创建一个符号链接ln -s /opt/gcc-4.8.2 /opt/gcc,然后,你只能输入gcc for version 4.8.2

【讨论】:

哇,这么多工作?该死!我明天可能会测试,因为整个过程需要太长时间(安装)。我不想选择编译器,我只想要新的。 或者通常,您可以使用类似符号,因为您将编译器安装到/opt,通常这个/opt 文件夹应该在您的系统定义的路径中。但是你需要以某种方式像g++_withyour_version一样运行,然后你可以创建一个符号链接ln -s /opt/gcc-4.8.2 /opt/gcc,然后,你只能输入gcc for version 4.8.2 这不是一个相关的答案。它显示了如何在已安装的编译器和路径中的编译器之间切换。 OP 想要一个不适用于他的操作系统版本的编译器,这个问题没有任何帮助。

以上是关于将 Ubuntu 12.04 上的 GCC 4.6.3 升级到 4.8.2,并切换到新的编译器的主要内容,如果未能解决你的问题,请参考以下文章

如何在ubuntu16.04创建12.04 gcc编译环境

Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解

如何在我的 Ubuntu 11.04 (Natty Narwhal) 上获得 g++/gcc 4.6?

text 如何在Ubuntu LTS上安装最新的gcc(12.04,14.04,16.04)

Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

Ubuntu下两个gcc版本切换