Сборка GRUB не компилируется
Я клонировал 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 ответ
Как комментирует @jens, сопровождающие из вышестоящего уровня должны исправить этот разрыв сборки. На первый взгляд, решение кажется простым. Между тем обходной путь также прост и почти наверняка безопасен.
Как видно из журнала сбоя сборки, эта ошибка компиляции появляется только потому, что -Werror
Флаг активен, чтобы выдать все предупреждения об ошибках.
Повышенное предупреждение, которое нарушает вашу сборку, происходит в файле grub_script.yy.c
на линии 2367. Это фактически безобидное предупреждение. Вы можете заставить его не продвигаться одним из двух способов:
./configure
скрипт имеет опцию --disable-werror
, который удаляет -Werror
флаг из всех сборников. Таким образом, вы можете запустить:
$ ./configure --target=x86_64 --with-platform=efi --disable-werror
$ make
Это решение не приведет к тому, что предупреждения компиляции будут приводить к ошибкам, и, скорее всего, вы "должны" довольствоваться. Вы можете предпочесть несколько более сфокусированный обходной путь, который отключает продвижение ошибок только для того типа предупреждений, который фактически нарушил вашу сборку:
statement with no effect [-Werror=unused-value]
Вы можете сделать это с помощью:
$ ./configure --target=x86_64 --with-platform=efi CPPFLAGS=-Wno-error=unused-value
$ make