GRUB 构建无法编译

Posted

技术标签:

【中文标题】GRUB 构建无法编译【英文标题】:GRUB build fails to compile 【发布时间】:2019-02-24 13:06:59 【问题描述】:

我从 Github https://github.com/coreos/grub 克隆了 grub,但是它无法编译并给出错误。错误似乎很明显,但关键是上游代码没有编译。我做错了什么吗?

我做了以下事情来编译:

./autogen.sh
./configure --target=x86_64 --with-platform=efi
make

我得到这个错误:

grub_script.yy.c: In function ‘yy_fatal_error’:
grub_script.yy.c:19:22: error: statement with no effect [-Werror=unused-value]
 #define fprintf(...) 0
                      ^
grub_script.yy.c:2367:2: note: in expansion of macro ‘fprintf’
  fprintf( stderr, "%s\n", msg );
  ^
cc1: all warnings being treated as errors
Makefile:35746: recipe for target 'normal_module-grub_script.yy.o' failed
make[3]: *** [normal_module-grub_script.yy.o] Error 1
make[3]: Leaving directory '/tmp/grub-2.02/grub-core'
Makefile:23531: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/tmp/grub-2.02/grub-core'
Makefile:10904: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/tmp/grub-2.02'
Makefile:3130: recipe for target 'all' failed
make: *** [all] Error 2

我尝试使用 gcc 4.8,5 和 7,但同样的错误。我的主机是 Ubuntu-18 64 位。

【问题讨论】:

你是否已经向上游询问过这个问题? @Jens :是的,在提出这个问题之前,我还在 GRUB 的邮件线程中报告了这一点。到目前为止没有收到任何回复。 这看起来像一个非常古老的 grub 叉子。实际上游是否也存在问题:git.savannah.gnu.org/git/grub.git?我在lists.gnu.org/mailman/listinfo/bug-grub 或lists.gnu.org/mailman/listinfo/grub-devel 上都没有看到任何关于此主题的明显报告 - 您将报告发送到哪里? 【参考方案1】:

作为@jens cmets,上游维护者应该修复这个构建中断。在 从表面上看,修复似乎很简单。同时,解决方法也很简单,而且几乎可以肯定是安全的。

正如您从失败的构建日志中看到的那样,您只会收到此编译错误 因为-Werror 标志有效,所以将所有警告提升为错误。

破坏您的构建的升级警告出现在文件 grub_script.yy.c 的第 2367 行。 这实际上是无害的警告。您可以通过以下两种方式之一使其提升:-

./configure 脚本有一个选项--disable-werror,它删除了-Werror 所有编译中的标志。所以你可以运行:

$ ./configure --target=x86_64 --with-platform=efi --disable-werror
$ make

此解决方案将导致 no 编译警告升级为错误,并且 很可能是您“应该”满足的。您可能更喜欢更集中的解决方法,即禁用 error-promotion 用于实际破坏您的构建的警告类型:

statement with no effect [-Werror=unused-value]

您可以通过以下方式实现:

$ ./configure --target=x86_64 --with-platform=efi CPPFLAGS=-Wno-error=unused-value
$ make

【讨论】:

以上是关于GRUB 构建无法编译的主要内容,如果未能解决你的问题,请参考以下文章

Linux From Scratch(LFS11.0)构建 LFS 系统 - GRUB-2.06

编译UEFI版本Grub2引导多系统文件efi

将预编译的 GRUB 2 安装到原始映像

为 HP 瘦客户端编译自定义内核并使用 grub 创建可引导 ISO

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - GRUB-2.02~beta2

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - GRUB-2.02~beta2