我正在使用一个使用qt3的软件。它可以很好地运行unx86Linux系统。当我试图将它移植到Raspberry Pi 2时,我得到了一个奇怪的编译器错误。谷歌无法帮助我,我尝试过的一切都失败了。
错误是:
无法将填充字段‘((QChar*)->QChar::ucs’绑定到‘ushort&{又名短的无符号int&}’
,它引用qstring.h .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,它只是将错误移到上面的行。我还试图明确定义体系结构、浮动abi和cpu。
这里是我的环境:
如果你想知道为什么我会使用qt3和老gcc,那是因为我们想让我们的源代码与我们使用中的一些旧系统兼容。
我的问题是:,造成这个错误的原因是什么,以及如何修复它?(最好在不更改qt3头文件的情况下进行修复)。
发布于 2018-01-16 10:23:18
这个错误很奇怪。我发现的解决办法更奇怪。
似乎来自https://download.qt.io/archive/qt/3/的https://download.qt.io/archive/qt/3/安装包含不同的头文件,而不是来自https://launchpad.net/ubuntu/precise/armhf的debian包。
在从debian包安装qt3而不是从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头文件有任何问题,也可能与这些差异有关。
https://stackoverflow.com/questions/48278201
复制相似问题