我正在使用qt3的软件。它工作正常un x86-linux系统。当我试图将它移植到Raspberry Pi 2时,我得到了一个奇怪的编译器错误。谷歌无法帮助我,我尝试的一切都失败了。
错误是:
无法绑定打包字段'((QChar *)this) - > QChar :: ucs'改为'ushort& {aka short unsigned 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
,只是将错误移到上面一行。我还尝试明确定义架构,浮动abi和cpu。
这是我的环境:
如果您想知道为什么我使用qt3和旧的gcc,那是因为我们希望保持源代码与我们使用的旧系统兼容。
我的问题是: 此错误的原因是什么以及如何解决?(最好在不更改qt3头文件的情况下进行修复。)
答案 0 :(得分:0)
这个错误很奇怪。我发现的解决方案甚至更奇怪。
来自https://download.qt.io/archive/qt/3/的qt3安装似乎包含与来自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头文件有任何问题,也可能是这些差异。