看起来 gcc-5 最近已从 Debian 的不稳定存储库中删除。我需要 gcc-5 来编译较旧的 Linux 内核(3.19),因此我希望从源代码构建它,但这给我带来了很大的麻烦。我一直按照找到的说明进行操作这里,但我发现自己想知道我需要设置哪些设置等等。到目前为止,我已经做了以下工作。
- 下载并解压源代码。
- 通过执行以下操作配置 gcc-5:
% mkdir objdir
% cd objdir
% ../gcc-5.4.0/configure (I included neither options nor target flags)
objdir
尝试在我的目录中使用以下内容进行构建:
% make BOOT_CFLAGS='-O' bootstrap
然而,引导过程中出现了错误,导致我无法继续安装。运行5分钟左右,遇到如下错误:
In file included from ../../../../gcc-5.4.0/libgcc/unwind-dw2.c:401:0:
./md-unwind-support.h: In function 'x86_fallback_frame_state':
./md-unwind-support.h:141:18: error: field 'uc' has incomplete type
struct ucontext uc;
^
make[5]: *** [../../../../gcc-5.4.0/libgcc/shared-object.mk:14: unwind-dw2.o] Error 1
make[5]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/32/libgcc'
make[4]: *** [Makefile:1154: multi-do] Error 1
make[4]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/libgcc'
make[3]: *** [Makefile:119: multi-do] Error 2
make[3]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/libgcc'
make[2]: *** [Makefile:16510: all-stage1-target-libgcc] Error 2
make[2]: Leaving directory '/home/me/objdir'
make[1]: *** [Makefile:22461: stage1-bubble] Error 2
make[1]: Leaving directory '/home/me/objdir'
make: *** [Makefile:22798: bootstrap] Error 2
我正在运行 Debian 10 (Buster) 并安装了所列的必要先决条件这里。
任何帮助或指导,无论是修复我在引导过程中遇到的错误,还是一般从源代码构建的错误,都将不胜感激!谢谢。
答案1
原因是 glibc 发生了变化,破坏了与旧编译器的兼容性。存在一个修补对于那些编译器。补丁在文件中替换struct ucontext
为,其中,等。ucontext_t
libgcc/config/<arch>/linux-unwind.h
<arch>
i386
aarch64
alpha
有一个类似的关于 stackoverflow 的问题。
除了这些修复之外,我还需要对来自的消毒剂代码进行修复这里(其中一些就足够了)并且这里。
之后海湾合作委员会终于建成了。