while read name; do for i in {00..99}; do echo ${name}${i}; done; done < name_list.txt
По-видимому, существует конфликт между макросами, связанными с атрибутом gcc fallthrough
в гостевых дополнительных драйверах виртуального ящика, и заголовками ядра Linux.
В частности, драйверы виртуальных ящиков определяют несколько таких макросов, как:
root@vdebtest:/usr/src/vboxguest-5.1.38$ grep fallthrough -R
vboxvideo/include/iprt/cdefs.h:# define RT_FALL_THROUGH() __attribute__((fallthrough))
vboxguest/include/iprt/cdefs.h:# define RT_FALL_THROUGH() __attribute__((fallthrough))
vboxsf/include/iprt/cdefs.h:# define RT_FALL_THROUGH() __attribute__((fallthrough))
Но в ядре Linux в include/linux/compiler _attribute.h есть что-то вроде этого:
/*
* Add the pseudo keyword 'fallthrough' so case statement blocks
* must end with any of these keywords:
* break;
* fallthrough;
* goto <label>;
* return [expression];
*
* gcc: https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html#Statement-Attributes
*/
#if __has_attribute(__fallthrough__)
# define fallthrough __attribute__((__fallthrough__))
#else
# define fallthrough do {} while (0) /* fallthrough */
#endif
Теперь, если я правильно понимаю ваш журнал сборки, я думаю, что эти RT_FALL_THROUGH
на самом деле закончатся как __attribute__((__attribute__((__fallthrough__))))
, что испортит код.
Не могли бы вы попробовать зайти в свой каталог /usr/src/vboxguest-x.y.z
и заменить все __attribute__((fallthrough))
(, их всего 3 в моей установке )на __attribute__((__fallthrough__))
? (Обычные falthrough
тоже должны работать, я думаю )...
Затем перестройте все это с помощью ./build_in_tmp
.
Обновление:Я вижу, что некоторое время назад были жалобы на эту тему здесь . И вроде бы уже исправлено через этот тикет .