【问题标题】:C++/QT/ARM Processors Cross-compiling/Programming [closed]C ++ / QT / ARM处理器交叉编译/编程[关闭]
【发布时间】:2014-01-04 10:05:19
【问题描述】:

尊敬的所有 {C++|QT|ARM Processors} 开发人员

你好

最近,我参与了一个 QT/ARM 处理器软件开发项目。 该项目的一般组成部分是:

Processor: Mini440 FriendlyARM (400 MHz Samsung S3C2440 ARM926T), 
    www.friendlyarm.net
    www.arm9.net
OS: Linux (Kernel version 2.6.32)
Programming Language: C++ (GCC/g++)
GUI Framework: QT

该项目的主要目的是为 嵌入式手持设备,使用 QT/Embedded Linux。

主机(开发机)上命令 uname -a 的输出为:

$ uname -a

Linux scorpion 3.5.0-39-generic #60~precise1-Ubuntu SMP Wed Aug 14 15:38:41 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

在嵌入式 ARM 设备上命令 uname -a 的输出是:

Liunx FriendlyARM 2.6.32-FriendlyARM #5 Wed Jun 6 15:50:50 HKT 2012 armv4tl 未知。

我的第一个问题是:

问。主机和目标计算机具有相同的架构是否重要, 我的意思是两者都应该是 32 位(x86 或 i586/i686)还是都应该是 64 位(x86_64)?

我做了以下步骤:

  1. 我使用基于 QT Designer (5.0.2) 的 QT Creator (2.7.0) 编写了一个简单的 GUI 在桌面 Linux 机器(主机)上

  2. 根据知识,在过去两个月里,我从书籍和互联网上获得了关于交叉编译、工具链和其他许多相关概念的知识,我发现我必须安装另一个来自奇趣科技的软件,叫做 Qtopia,它的嵌入式版本QT。我尝试 安装最新版本的 Qtopia,名为 qtopia-core-opensource-src-4.3.5 在这一点上,我在配置、构建和制作方面遇到了很多问题 软件。一个问题是主机上的 g++ 是 4.8.1(非常新),但是 Qtopia 大约是7年前。当我尝试从源代码构建 Qtopia g++ 编译器会发出几个 C++ 错误,例如:

    错误:“ptrdiff_t”没有命名类型 错误:未在此范围内声明“附加”,也没有声明,在哪里找到 通过参数依赖查找

当然,我解决了这些问题,但很明显 g++ 会出现这些错误 因为Qtopia是用C++98写的,但是g++ 4.8.1是基于C++11的 我的问题是:

问。 Qtopia 使用哪个版本的 GCC 重要吗? 另一件事是应该使用哪个版本的 QT/Embedded?

问。我是否必须使用 QT/Embedded 的旧版本,如 Qtopia 或 我可以使用较新的版本,例如 qt-everywhere-opensource-src-4.8.4?

另一个问题是内核版本:重要吗 问:主机和目标计算机具有相同的内核编号 (x.y.z) 是否重要?

如您所见,我迷失了交叉编译和移植书面软件的细节 从主机到嵌入式设备。我使用QT和写C++几乎没有问题 在桌面版本中。 最后,感谢您提供一般但实用的指南/提示 从 x86 GCC 交叉编译到 FreindlyARM 平台。

请多指教

TIA

Saeed Amrollahi Boyouki

【问题讨论】:

  • 主机和目标不需要有任何共同点——重要的是交叉编译器工具链被配置为在主机上运行并为目标生成代码。我对你的 Qtopia 问题一无所知。我做了一点 Qt 编程(虽然不是任何面向 GUI 的东西),但从未有意处理过 Qtopia。

标签: c++ linux qt arm qmake


【解决方案1】:

问。主机和目标计算机具有相同的架构是否重要,我的意思是两者都应该是 32 位(x86 或 i586/i686)还是都应该是 64 位(x86_64)?

不,你可以有任何变化,虽然我从未见过 32 位主机和 64 位目标。根据我的知识,其他组合应该可以正常工作。

问。 Qtopia 使用哪个版本的 GCC 重要吗?另一件事是应该使用哪个版本的 QT/Embedded?

是的,这很重要。不要混合使用新旧软件,因为它们不能很好地结合在一起。

问。我是否必须使用旧版本的 QT/Embedded,如 Qtopia,或者我可以使用新版本,如 qt-everywhere-opensource-src-4.8.4?

没有。事实上,不要使用古老的 Qtopia,尝试使用最近的 Qt 版本,例如 Qt 5.2。原因很简单,就是设计缺陷,而且现在没有得到维护。

另一个问题是关于内核版本:重要吗 Q. 主机和目标计算机具有相同的内核号 (x.y.z) 重要吗?

不,实际上几乎总是不同的。这是因为 Linux 内核种类繁多,被不同的发行版或发行版生成器使用。

最后,感谢您提供从 x86 GCC 交叉编译到 FreindlyARM 平台的一般但实用的指南/提示。

如果您想为您的目标自行构建 Qt,则需要注意 -platform-xplatform 选项。前者定义您的主机平台,后者定义嵌入式目标平台。

基本上,您需要使 qmake 以 mkspecs 文件的形式为您的板提供适当的支持。如果没有,在现有的基础上从零开始,相对容易。

当您为嵌入式板构建软件时,您需要在基于 qmake 的项目中使用-spec 选项来选择正确的目标。

我还建议考虑 QtCreator 作为一个新手,你可以正确配置“工具包”,自定义部署步骤等。它有很多内置的跨工具链开发支持。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2017-12-29
  • 2013-10-10
  • 1970-01-01
  • 2010-10-04
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多