GRUB构建无法编译

时间:2018-09-20 09:07:25

标签: makefile gnu-make grub2

我从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位。

1 个答案:

答案 0 :(得分:1)

就像@jens一样,上游维护者应修复此构建中断。在 面对它,修复似乎很简单。同时,解决方法也很简单,而且几乎可以肯定是安全的。

从失败的构建日志中看到的,您只会得到此编译错误 因为-Werror标志有效,所以可以将所有警告升级为错误。

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

./configure脚本具有一个选项--disable-werror,该选项删除了-Werror 所有编辑中的标志。这样就可以运行:

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

此解决方案将导致 no 编译警告被提升为错误,并且 很可能让您“满意”。您可能需要更集中的解决方法来禁用 错误促销表示实际上破坏了您的构建的警告类型:

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

您可以使用以下方法完成该任务:

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