Qt3 на руке: не может связать упакованное поле

Я работаю с программным обеспечением, использующим qt3. Он отлично работает в системах x86-linux. Когда я попытался перенести его на Raspberry Pi 2, я получил странную ошибку компилятора. Google не смог мне помочь, и все, что я попробовал, не удалось.

Ошибка:

не может привязать упакованное поле ‘((QChar *) this) -> QChar :: ucs’ к ‘ushort&{короткая неподписанная int&}»

который ссылается на следующую часть qstring.h

class Q_EXPORT QChar {
...
#ifdef Q_NO_PACKED_REFERENCE
ushort &unicode() { return *(&ucs); }
#else
ushort &unicode() { return ucs; } // Throws error
#endif
...
}

Конечно, я уже пытался определить Q_NO_PACKED_REFERENCE который просто перемещает ошибку в строку выше. Я также попытался точно определить архитектуру, float abi и cpu.

Вот мое окружение:

  • Процессор: ARMv7
  • ОС: Ubuntu 16.04
  • Компилятор: gcc / g ++ 4.8.5 (Ubuntu / Linaro 4.8.5-4ubuntu2)
  • Версия Qt: 3.3.8b из Вот (пробовал с х11 и встраивал)

Если вам интересно, почему я использую qt3 и старый gcc, это потому, что мы хотим, чтобы наш исходный код был совместим с некоторыми более старыми системами, которые мы используем.

Мой вопрос:
В чем причина этой ошибки и как я могу это исправить? (Желательно исправить без изменения заголовочных файлов qt3.)

0

Решение

Эта ошибка странная. Решение, которое я нашел, еще более странное.

Похоже установки qt3 от https://download.qt.io/archive/qt/3/ содержат файлы заголовков, отличные от пакетов Debian из https://launchpad.net/ubuntu/precise/armhf.

После установки qt3 из пакетов debian вместо компиляции исходного кода со страницы qt мой код скомпилировался нормально.

Я посмотрел на оба заголовочных файла, и строка, вызывающая ошибку, теперь содержит дополнительное приведение.

От qt.io

class Q_EXPORT QChar {
...
#ifdef Q_NO_PACKED_REFERENCE
ushort &unicode() { return *(&ucs); }
#else
ushort &unicode() { return ucs; } // Throws error
#endif
...
}

Из панели запуска

class Q_EXPORT QChar {
...
#ifdef Q_NO_PACKED_REFERENCE
ushort &unicode() { return *((ushort*)&ucs); }
#else
ushort &unicode() { return ucs; } // Throws error
#endif
...
}

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

0

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

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

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