我正在尝试在 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;
^~
根据 Jonathan Wakely 通过 gcc-help 邮件列表,
“这个 GCC 代码实际上没有遵循相关标准,当 glibc 变得更严格时,它被 glibc 的变化打破了。
您可以通过在相关文件中将“struct ucontext”替换为“ucontext_t”来修复它。”
因此,正如在此 stackoverflow 答案中所述,我通过替换文件
ucontext
的ucontext_t
第 61 行和第 141 行来修复它builddir/libgcc/config/i386/linux_unwind.h
。