gcc升级方法

gcc升级方法,第1张

centos 6.6 默认的gcc 版本为:

编译需求,需要升级至4.8,因之前手动编译升级gcc出现问题,考虑使用更稳妥的方式进行

升级。

查询到的升级方式如下:

升级至4.8.2

升级至4.9

升级至5.2

scl enable devtoolset-3 bash只是临时覆盖系统原有的GCC引用,如果想永久覆盖,可在root /.bashrc文件中添加source /opt/rh/devtoolset-3/enable

CrossBuild很蛋疼的,以目标内核2.6.x为例,我们需要以下基本包:

binutils-2.23.1.tar.bz2

gcc-4.8.2.tar.bz2

glibc-2.18.tar.bz2

glibc-linuxthreads-2.5.tar.bz2

gdb-7.6.1.tar.bz2

linux-2.6.34.14.tar.xz

mpfr-3.1.2.tar.bz2

mpc-1.0.1.tar.gz

gmp-5.1.3.tar.bz2

因为编译过程很费时,你要在bash配置文件中直接声明环境变量:

vim ~/.bashrc

export TARGET=arm-linux-gnueabi

export PREFIX=/usr/local/arm/4.8.2

export TARGET_PREFIX=$PREFIX/$TARGET

export PATH=$PATH:$PREFIX/bin

#source ~/.bashrc

以便下次工作继续恢复现场。

工具链创建:

先来安装mpfr、mpc、gmp。#号表示在root下工作。

#tar -xjf gmp-5.1.3.tar.bz2 &&cd gmp-5.1.3

#mkdir build &&cd build &&\

../configure --prefix=/usr/local/gmp --build=x86_64-linux-gnu &&\

make &&make install

OK,gmp done,Next,搞搞mpfr:

#tar -xjvf mpfr-3.1.2.tar.bz2 &&cd mpfr-3.1.2

#../configure --build=x86_64-linux-gnu --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp &&\

make &&make install

OK, mpfr done, Next we build mpc:

#tar -xzvf mpc-1.0.1.tar.gz &&cd mpc-1.0.1

mkdir build &&cd build

#../configure --build=x86_64-linux-gnu --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr &&\

make &&make install

After, we need to copy linux-kernel-headers:

xz -d linux-2.6.34.14.tar.xz

tar -xvf linux-2.6.34.14.tar

cd linux-2.6.34.14

make menuconfig

这里我们不作任何个性,直接保存退出。

#make include/linux/version.h

#mkdir -p $TARGET_PREFIX/include

#cp -r ./include/linux/ $TARGET_PREFIX/include

#cp -r ./include/asm-generic/ $TARGET_PREFIX/include

#cp -r ./arch/arm/include/asm/ $TARGET_PREFIX/include

然后编译binutils:

#tar -xjvf binutils-2.23.1.tar.bz2

#cd binutils-2.23.1

#mkdir build &&cd build

#../configure --prefix=$PREFIX --target=$TARGET

#make

#make install

$TARGET得到一大堆工具,我就不一一介绍了。

接下来为ARM平台编译不带链接库的原初编译器,这一步称作恐龙蛋生小鸡。

解开tar -xjvf gcc-4.8.2.tar.bz2,并把mpfr-3.1.2.tar.bz2、mpc-1.0.1.tar.gz、gmp-5.1.3.tar.bz2也解开,去掉版本号放到gcc源目录下。

先删除 gcc下上述几个包,如果存在的话:

rm -rf mpfr-3.1.2 mpc-1.0.1 gmp-5.1.3

然后解包,并移入gcc下:

#tar -xjvf gmp-5.1.3.tar.bz2

#mv gmp-5.1.3 gmp

#mv ./gmp ./gcc-4.8.2

#tar -xjvf mpfr-3.1.2.tar.bz2

#mv mpfr-3.1.2 mpfr

#mv ./mpfr ./gcc-4.8.2

#tar -xzvf mpc-1.0.1.tar.gz

#mv mpc-1.0.1 mpc

#mv ./mpc ./gcc-4.8.2

可以编译gcc了:

#cd gcc-4.8.2

#mkdir build &&cd build

#../configure --prefix=$PREFIX --target=$TARGET --without-headers --enable-languages=c --disable-threads --with-newlib --disable-shared --disable-libmudflap --disable-libssp --disable-decimal-float &&\

make all-gcc &&make install-gcc &&make all-target-libgcc &&\

make install-target-libgcc

如果没出错的话,这里的预编译就快搞好了,擦把汗先。

#tar -xvf glibc-2.18.tar.xz

#tar -xvf glibc-linuxthreads-2.5.tar.bz2 --directory=./glibc-2.18

# cd glibc-2.18

# mkdir build

# cd build

# CC=$TARGET-gcc

#export CFLAGS="-g -O2 -march=arm"

# ln -s /usr/local/arm/4.8.2/lib/gcc/arm-linux-gnueabi/4.8.2/libgcc.a /usr/local/arm/4.8.2/lib/gcc/arm-linux-gnueabi/4.8.2/libgcc_eh.a

这里编译好的glibc就是for arm的glibc了。

创建config.cache配置文件

# vim config.cache

libc_cv_forced_unwind=yes

libc_cv_c_cleanup=yes

libc_cv_arm_tls=yes

# ../configure --host=$TARGET --target=$TARGET --prefix=$TARGET_PREFIX --enable-add-ons --disable-profile --cache-file=config.cache --with-binutils=$PREFIX/bin --with-headers=$TARGET_PREFIX/include

#make all

#make install

预编译环境搭好,我擦已经下班了,明天继续。

好了,为正式开始 arm 铸刀:

# cd gcc-4.8.2/build/

# rm -rf *

# ../configure --prefix=$PREFIX --target=$TARGET --enable-shared --enable-languages=c,c++

# make

# make install

这就是arm版的gcc了

编译gdb

# tar -xvf gdb-7.6.1.tar.bz2

# make

# make install

创建链接

# cd $PREFIX/bin

# ln -s arm-linux-gnueabi-addr2line arm-linux-addr2line

# ln -s arm-linux-gnueabi-ar arm-linux-ar

# ln -s arm-linux-gnueabi-as arm-linux-as

# ln -s arm-linux-gnueabi-c++ arm-linux-c++

# ln -s arm-linux-gnueabi-c++filt arm-linux-c++filt

# ln -s arm-linux-gnueabi-cpp arm-linux-cpp

# ln -s arm-linux-gnueabi-elfedit arm-linux-elfedit

# ln -s arm-linux-gnueabi-g++ arm-linux-g++

# ln -s arm-linux-gnueabi-gcc arm-linux-gcc

# ln -s arm-linux-gnueabi-gcc-4.6.3 arm-linux-gcc-4.6.3

# ln -s arm-linux-gnueabi-gcov arm-linux-gcov

# ln -s arm-linux-gnueabi-gdb arm-linux-gdb

# ln -s arm-linux-gnueabi-gdbtui arm-linux-gdbtui

# ln -s arm-linux-gnueabi-gprof arm-linux-gprof

# ln -s arm-linux-gnueabi-ld arm-linux-ld

# ln -s arm-linux-gnueabi-ld.bfd arm-linux-ld.bfd

# ln -s arm-linux-gnueabi-nm arm-linux-nm

# ln -s arm-linux-gnueabi-objcopy arm-linux-objcopy

# ln -s arm-linux-gnueabi-objdump arm-linux-objdump

# ln -s arm-linux-gnueabi-ranlib arm-linux-ranlib

# ln -s arm-linux-gnueabi-readelf arm-linux-readelf

# ln -s arm-linux-gnueabi-run arm-linux-run

# ln -s arm-linux-gnueabi-size arm-linux-size

# ln -s arm-linux-gnueabi-strings arm-linux-strings

# ln -s arm-linux-gnueabi-strip arm-linux-strip

这把可以杀人了,开始为你树莓派编译软件吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/8324019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存