Сборка GRUB не компилируется - PullRequest
0 голосов
/ 20 сентября 2018

Я клонировал grub из Github https://github.com/coreos/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-bit.

1 Ответ

0 голосов
/ 20 сентября 2018

Как комментирует @jens, сопровождающие из вышестоящего уровня должны исправить этот разрыв сборки.На первый взгляд исправление кажется простым.Между тем обходной путь также прост и почти наверняка безопасен.

Как видно из журнала сбоя сборки, вы получаете эту ошибку компиляции только потому, что действует флаг -Werror, чтобы выдавать все предупреждения об ошибках.

Повышенное предупреждение, нарушающее вашу сборку, появляется в файле grub_script.yy.c в строке 2367. Это фактически безобидное предупреждение.Вы можете вызвать его , а не одним из двух способов: -

Сценарий ./configure имеет параметр --disable-werror, который удаляет флаг -Werror из всех компиляций.Таким образом, вы можете выполнить:

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

Это решение приведет к тому, что no предупреждений компиляции будет приведено к ошибкам, и, скорее всего, вы «должны» довольствоваться.Вы можете предпочесть несколько более сфокусированный обходной путь, который отключает продвижение ошибок only для типа предупреждения, который фактически нарушил вашу сборку:

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

Это можно сделать с помощью:

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