gpt4 book ai didi

c++ - ARM 上的qt3 : cannot bind packed field

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:57 26 4
gpt4 key购买 nike

我正在使用一个使用 qt3 的软件。它在 x86-linux 系统上运行良好。当我试图将它移植到 Raspberry Pi 2 时,我遇到了一个奇怪的编译器错误。 Google 无法帮助我,我尝试的一切都失败了。

错误是:

cannot bind packed field '((QChar*)this)->QChar::ucs' to '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,它只是将错误移至上面的行。我还尝试明确定义架构、float abi 和 cpu。

这是我的环境:

  • 中央处理器:ARMv7
  • 操作系统:Ubuntu 16.04
  • 编译器:gcc/g++ 4.8.5 (Ubuntu/Linaro 4.8.5-4ubuntu2)
  • Qt 版本:3.3.8b 来自 here (尝试使用 x11 和嵌入式)

如果你想知道为什么我使用 qt3 和一个旧的 gcc,那是因为我们想让我们的源代码与我们使用的一些旧系统兼容。

我的问题是:此错误的原因是什么,我该如何解决?(最好在不更改 qt3 头文件的情况下进行修复。)

最佳答案

那个错误很奇怪。我找到的解决方案甚至更奇怪。

似乎是来自 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
...
}

两组 header 之间似乎存在更多差异。如果其他人对 qt 头文件有任何问题,也可能是这些差异。

关于c++ - ARM 上的qt3 : cannot bind packed field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48278201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com