freestanding版本的gcc编译

本文档详细记录了在Linux环境下交叉编译GCC 4.8.5和11.2.0的过程,包括环境设置、依赖库的编译与安装、配置选项以及遇到的错误及解决办法。主要问题涉及缺失头文件、对象文件编译失败和动态链接器特性检查错误等。解决方案包括安装缺失库、调整配置参数和手动编译依赖库。
摘要由CSDN通过智能技术生成

GCC源码下载:

Index of /gnu/gcchttps://ftp.gnu.org/gnu/gcc/新建一个build_linux目,该目录作为根目录。之后的操作都在该目录下操作

新建:build,source,cross-tool,cross-gcc-tmp,sysroot

环境:

export HOST=x86_64-pc-linux-gnu
export BUILD=$HOST
export TARGET=x86_64-none-linux-gnu
export CROSS_TOOL=/home/sundh/build_linux/cross-tool
export CROSS_GCC_TMP=/home/sundh/build_linux/cross-gcc-tmp
export SYSROOT=/home/sundh/sysroot

其中HOST通过下面的命令获得:

$ echo $MACHTYPE
x86_64-pc-linux-gnu
 

1 GCC-4.8.5编译

下载gcc源码链接:

Index of /software/gcc/releases

下载gcc-4.8.5.tar,bz2.

下载:mpc-1.0.1.tar.gz, gmp-5.0.5.tar.bz2, mpfr-3.1.1.tar.bz2

下载的源码都放到source目录下。

进入build。

编译gmp,mpft,mpc。这几步骤差不多,都是解压源码,配置,make,make makeinstall

编译前事先安装m4:sudo apt-get install m4

1 gmp编译

./configure --prefix=/usr/local/gmp

make

sudo make install

2 mpfr编译

./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp

make

sudo make install

3 编译mpc

./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr

sudo make install

编译后把这三个包的路径加到环境变量中

解压源码:tar xvf  ../source/gcc-4.8.5.tar.gz

进入源码目录gcc-4.8.5,把gmp,mpfr,mpc三个依赖包也解压到当前目录。并把这三个源码解压后的名字中的后缀去掉。

回到build,在build下新建gcc-build。然后配置:

../gcc-4.8.5/configure --prefix=$CROSS_GCC_TMP --target=$TARGET --with-sysroot=$SYSROOT --with-newlib --enable-languages=c  --with-mpfr-include=/home/sundh/build_linux/build/gcc-4.8.5/mpfr/src --with-mpfr-lib=/home/sundh/build_linux/build/gcc-build/mpfr/src/.libs --disable-shared --disable-threads --disable-decimal-float --disable-libquadmath --disable-libmudflap --disable-libgomp --disable-nls --disable-libssp

make

make install

遇到的问题:

1 缺少sys/cdef.h

如:

/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory

解决办法:sudo apt install gcc-multilib

参考网址:

gcc编译出错:fatal error: sys/cdefs.h: No such file or directory_R-QWERT的博客-CSDN博客

checking for suffix of object files... configure: error: in `/home/sundh/build_linux/build/gcc-build485/x86_64-none-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
解决办法,网上找到一个解决办法如下:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/mpc/lib/

但是我目前的编译方法是把mpc,gmp,mpfr都放在gcc-4.8.5的源码下面,让他自动编译了,应该不用这么处理的。看来自动编译是没办法的。只能手动一个个去编译mpc,gmp,和mpfr了。

3

checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
Makefile:14601: recipe for target 'configure-stage1-target-libstdc++-v3' failed

解决办法:还未解决

2 GCC-11.2.0

准备工作跟上的类似。略过。注意这里要把gcc升级到gcc-5.0,参考:

ubuntu14.04 升级gcc的方法_weixin_33872566的博客-CSDN博客

gcc配置命令:

../gcc-11.2.0/configure --prefix=$CROSS_GCC_TMP --target=$TARGET --with-sysroot=$SYSROOT --with-newlib --enable-languages=c --with-mpfr-include=/niubi/build/gcc-11.2.0/mpfr/src --with-mpfr-lib=/niubi/build/gcc-build/mpfr/src/.libs --disable-shared --disable-threads --disable-decimal-float --disable-libquadmath --disable-libmudflap --disable-libgomp --disable-nls --disable-libssp

错误:

1

configure: error: in `/niubi/build/gcc-build/x86_64-none-linux-gnu/libatomic':
configure: error: C compiler cannot create executables

解决办法:

这个问题看起来就是libatomic的问题(应该时原子操作的库)。故在配置gcc的时候取消编译这个库:加上--disable-libatomic 然后就编译成功了

2 缺少libgcc_eh.a

编译成功后发下缺少ibgcc_eh.a。这是异常处理的库。

解决办法:

先搁置。不管了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值