Я работаю с программным обеспечением, использующим 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.
Вот мое окружение:
Если вам интересно, почему я использую qt3 и старый gcc, это потому, что мы хотим, чтобы наш исходный код был совместим с некоторыми более старыми системами, которые мы используем.
Мой вопрос:
В чем причина этой ошибки и как я могу это исправить? (Желательно исправить без изменения заголовочных файлов qt3.)
Эта ошибка странная. Решение, которое я нашел, еще более странное.
Похоже установки 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, это также может быть связано с этими различиями.
Других решений пока нет …