我正在尝试在 Ubuntu20.04 上构建 GCC6.3.0,但似乎无法理解/修复错误。
我下载了 tar 文件(尝试了多个镜像,总是同样的错误),解压它,在这个解压后的目录中运行
./contrib/download_prerequisites
它会下载并创建所需的快捷方式。然后我退出此目录,创建一个新目录“gccbuild”,在此目录中,我运行
$PWD/../gcc-6.3.0/configure --prefix=$HOME/GCC-6.3.0 --enable-languages=c,c++,fortran,go
如果需要,我可以添加完整的输出,有很多否定,但我不认为这是问题所在。输出的最后几行:
checking where to find the target windmc... host tool
checking whether to enable maintainer-specific portions of Makefiles... no
configure: creating ./config.status
config.status: creating Makefile
然后,我运行 make,以下是输出的最后几行:
/home/m/GCC-6.3.0/x86_64-pc-linux-gnu/include -isystem /home/m/GCC-6.3.0/x86_64-pc-linux-gnu/sys-include -g -O2 -O2 -g -O2 -DIN_GCC -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -fpic -mlong-double-80 -DUSE_ELF_SYMVER -I. -I. -I../.././gcc -I/home/m/gccbuild/../gcc-6.3.0/libgcc -I/home/m/gccbuild/../gcc-6.3.0/libgcc/. -I/home/m/gccbuild/../gcc-6.3.0/libgcc/../gcc -I/home/m/gccbuild/../gcc-6.3.0/libgcc/../include -I/home/m/gccbuild/../gcc-6.3.0/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS -DUSE_TLS -o _fixunssfsi.o -MT _fixunssfsi.o -MD -MP -MF _fixunssfsi.dep -DL_fixunssfsi -c /home/m/gccbuild/../gcc-6.3.0/libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS
make[5]: Leaving directory '/home/m/gccbuild/x86_64-pc-linux-gnu/32/libgcc'
make[4]: *** [Makefile:1161: multi-do] Error 1
make[4]: Leaving directory '/home/m/gccbuild/x86_64-pc-linux-gnu/libgcc'
make[3]: *** [Makefile:120: all-multi] Error 2
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/home/m/gccbuild/x86_64-pc-linux-gnu/libgcc'
make[2]: *** [Makefile:20436: all-stage1-target-libgcc] Error 2
make[2]: Leaving directory '/home/m/gccbuild'
make[1]: *** [Makefile:25715: stage1-bubble] Error 2
任何线索都将不胜感激!
编辑
我错过了实际的错误部分(感谢 gcc-help 邮件列表的 Stefan Ring):
In file included from ../../../../gcc-6.3.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;
^~
答案1
根据 Jonathan Wakely 在 gcc-help 邮件列表中的说法,
“这个 GCC 代码实际上并没有遵循相关标准,并且当 glibc 变得更加严格时,它被 glibc 的改变所破坏。
您可以通过在相关文件中将“struct ucontext”替换为“ucontext_t”来修复此问题。”
因此正如这个stackoverflow答案我通过替换文件第 61 行和第 141 行来修复ucontext
此ucontext_t
问题builddir/libgcc/config/i386/linux_unwind.h
。