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博客
2
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。这是异常处理的库。
解决办法:
先搁置。不管了。