Как я могу скомпилировать QMap без элемента гибкого массива в inotify_event, вызывающего ошибку сборки?

Я собираю Qt 4.6.4 из исходного кода для проекта. Я на Fedora 27 с выпуском ядра 4.14.6. Когда я пытаюсь бежать makeЯ получаю следующие ошибки в QMap:

In file included from /usr/include/features.h:423:0,
from /usr/include/bits/libc-header-start.h:33,
from /usr/include/string.h:26,
from ../../include/QtCore/../../src/corelib/tools/qbytearray.h:48,
from ../../include/QtCore/qbytearray.h:1,
from ../../include/QtCore/../../src/corelib/tools/qstring.h:46,
from ../../include/QtCore/qstring.h:1,
from ../../include/QtCore/../../src/corelib/kernel/qobject.h:48,
from ../../include/QtCore/qobject.h:1,
from ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:45,
from ../../include/QtCore/qcoreapplication.h:1,
from global/qt_pch.h:58:
../../include/QtCore/../../src/corelib/tools/qmap.h: In instantiation of ‘struct QMapPayloadNode<int, inotify_event>’:
../../include/QtCore/../../src/corelib/tools/qmap.h:151:48:   required from ‘static int QMap<Key, T>::payload() [with Key = int; T = inotify_event]’
../../include/QtCore/../../src/corelib/tools/qmap.h:632:32:   required from ‘void QMap<Key, T>::freeData(QMapData*) [with Key = int; T = inotify_event]’
../../include/QtCore/../../src/corelib/tools/qmap.h:167:67:   required from ‘QMap<Key, T>::~QMap() [with Key = int; T = inotify_event]’
io/qfilesystemwatcher_inotify.cpp:359:30:   required from here
/usr/include/sys/inotify.h:34:13: error: flexible array member ‘inotify_event::name’ not at end of ‘struct QMapPayloadNode<int, inotify_event>’
char name __flexarr; /* Name.  */

Структура inotify_event имеет гибкий элемент массива в конце, называемый name, что хорошо:

/* Structure describing an inotify event.  */
struct inotify_event
{
int wd;       /* Watch descriptor.  */
uint32_t mask;    /* Watch mask.  */
uint32_t cookie;  /* Cookie to synchronize two events.  */
uint32_t len;     /* Length (including NULs) of name.  */
char name __flexarr;  /* Name.  */
};

Но проблема в том, что структура QMapNode включает в себя два экземпляра того, что передается как T:

template <class Key, class T>
struct QMapNode {
Key key;
T value;
QMapData::Node *backward;
QMapData::Node *forward[1];
};

И в файле qfilesystemwatcher_inotify.cpp Qt пытается создать QMap с T = inotify_event, что приводит к двум экземплярам inotify_event, содержащимся в структурах QMapNode. Я предполагаю, что проблема здесь в том, что name гибкий массив в конце backward член в QMapNode вызывает ошибку.

Мой вопрос, как это вообще строилось? Было ли это вызвано каким-то новым изменением inotify.h после довольно старого выпуска Qt 4.6.4? Есть ли способ обойти это?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]