说实话,我实在太懒了,无法摆脱17.3-这对我有用。话虽如此,我仍然需要更新的gcc。为了针对不同的目标重复编译它,我需要修改并运行一个bash脚本(请参见下文)(我正在编写自己的玩具OS,因此必须使用专门生成的gcc)。
在下面的脚本中更改目录以匹配您拥有的目录。我将编译后的版本保存在自己的目录中,以便可以轻松在编译后的版本和系统的版本之间切换。我建议你这样做。您需要下载binutils-2.23.2以及您感兴趣的gcc版本(我在下面使用7.1.0)。将它们与以下脚本一起放入〜/ contrib目录。
您可能还希望将行“ --enabled-languages = c”更改为“ --enabled-languages = c,c ++,objc”-我的项目只需要C。另一个更改是PLATFORM的值。我使用“ i686-elf”,但对您不起作用(我在下面将其更改为适用于32位平台的内容)。您可以在64位平台上尝试使用“ x86_64-linux-gnu”。
出于好奇-我之所以这样构建它,是因为gcc构建过程曾经有一个错误,导致无法在源目录中进行重新构建。我不知道此错误是否仍然存在(我上次在4.8.0中遇到过),但是唯一的解决方法是,如果您要重建,则显式地在单独的目录中进行构建。
[编辑:执行GAD3R建议的上述依赖项的安装]
#!/bin/bash
function die() {
echo $1
exit 127
}
export PREFIX=/home/lelanthran/opt/cross
export TARGET=i686-linux-gnu
export PATH="$PREFIX/bin:$PATH"
pushd $PWD &> /dev/null
mkdir -p build-binutils
cd build-binutils
../binutils-2.23.2/configure \
--target=$TARGET \
--prefix="$PREFIX" \
--with-sysroot \
--disable-nls \
--disable-werror || die "binutils/config error"
make || die "binutils/make error"
make install || die "binutils/make install error"
popd &> /dev/null
pushd $PWD &> /dev/null
mkdir -p build-gcc-7.1.0
cd build-gcc-7.1.0
../gcc-7.1.0/configure \
--target=$TARGET \
--prefix="$PREFIX" \
--disable-nls \
--enable-languages=c \
--without-headers || die "gcc/config error"
make all-gcc || die "gcc/make all-gcc error"
make all-target-libgcc || die "gcc/make all-target-libgcc error"
make install-gcc || die "gcc/make install-gcc error"
make install-target-libgcc || die "gcc/make install-target-libgcc error"