如何解决“archlinux 中的 gcc 编译错误(sys/ustat.h:没有这样的文件或目录)?”

Md.*_*que 5 gcc compiler-errors compilation archlinux

截至目前,我的 archlinux 系统需要当前版本的 gcc (8.3) 以及 gcc 7.2 和 gcc 5.5(在其他路径中)。

我正在尝试编译源代码,如下所示:

$ ./contrib/download-prerequisites
Run Code Online (Sandbox Code Playgroud)

在构建目录中:

$ ../gcc-5.5.0/configure --prefix=/home/mjonyh/bin/gcc/5.5.0 --disable-multilib --enable-languages=c,c++,fortran
Run Code Online (Sandbox Code Playgroud)

比发现错误

sys/ustat.h: no such file or directory
Run Code Online (Sandbox Code Playgroud)

已安装: binutils gcc-libs libmpc gcc-ada libmpc dejagnu inetutils lib32-gcc-libs doxygen gcc-ada lib32-glibc

更新:我通过手动注释掉gcc-xxx/libsanitizer/sanitizer-common/sanitizer-platform-limits-posix.cc中的 ustat.h解决了该问题(行号 157 和 250)。因为archlinux 弃用了glibc 中的ustat.h。

Flo*_*mer 1

glibc 2.28 的发行说明是这样说的:

  • 过时的函数ustat不再适用于新链接的二进制文件;标题<ustat.h><sys/ustat.h>已被删除。该函数已被弃用,取而代之的是fstatfsstatfs

为了构建 GCC 5.5,您有以下几种选择:

  • 基于使用 glibc 2.27 或更早版本的旧发行版构建。
  • 将Go 前端的修复程序反向移植到 GCC 5。(ustat只是偶然添加到 Go 中,它的弃用早于 Go 开发的开始,甚至可能是 Google 作为一家公司的开始。)
  • --enable-languages=使用合适的调用参数禁用 gccgo 前端configure