GRUB 构建编译失败
GRUB build fails to compile
我从 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 评论的那样,上游维护者应该修复这个构建中断。在
从表面上看,修复似乎很简单。同时,解决方法也很简单,而且几乎肯定是安全的。
正如你从失败的构建日志中看到的,你只得到这个编译错误
因为 -Werror
标志有效,所以将所有警告升级为错误。
破坏构建的升级警告出现在文件 grub_script.yy.c
的第 2367 行。
这实际上是无害的警告。您可以通过以下两种方式之一使其 not 提升:-
./configure
脚本有一个选项 --disable-werror
,它删除了 -Werror
所有编译的标志。所以你可以 运行:
$ ./configure --target=x86_64 --with-platform=efi --disable-werror
$ make
此解决方案将导致 no 编译警告升级为错误,并且
可能是您 "supposed" 满意的。您可能更喜欢一种更集中的解决方法来禁用
error-promotion 仅 实际破坏构建的警告类型:
statement with no effect [-Werror=unused-value]
您可以通过以下方式完成:
$ ./configure --target=x86_64 --with-platform=efi CPPFLAGS=-Wno-error=unused-value
$ make
我从 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 评论的那样,上游维护者应该修复这个构建中断。在 从表面上看,修复似乎很简单。同时,解决方法也很简单,而且几乎肯定是安全的。
正如你从失败的构建日志中看到的,你只得到这个编译错误
因为 -Werror
标志有效,所以将所有警告升级为错误。
破坏构建的升级警告出现在文件 grub_script.yy.c
的第 2367 行。
这实际上是无害的警告。您可以通过以下两种方式之一使其 not 提升:-
./configure
脚本有一个选项 --disable-werror
,它删除了 -Werror
所有编译的标志。所以你可以 运行:
$ ./configure --target=x86_64 --with-platform=efi --disable-werror
$ make
此解决方案将导致 no 编译警告升级为错误,并且 可能是您 "supposed" 满意的。您可能更喜欢一种更集中的解决方法来禁用 error-promotion 仅 实际破坏构建的警告类型:
statement with no effect [-Werror=unused-value]
您可以通过以下方式完成:
$ ./configure --target=x86_64 --with-platform=efi CPPFLAGS=-Wno-error=unused-value
$ make