C ++ / QT / ARM处理器交叉编译/编程

时间:2014-01-04 10:05:20

标签: c++ linux qt arm qmake

亲爱的所有{C ++ | QT | ARM处理器}开发人员

您好

最近,我参与了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

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

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

$ uname -a

Linux scorpion 3.5.0-39-generic#60~minision1-Ubuntu SMP Wed 8月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未知。

我的第一个问题是:

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

我做了以下步骤:

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

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

    错误:'ptrdiff_t'没有命名类型 错误:'append'未在此范围内声明,并且未找到声明      通过参数依赖查找

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

    Q值。在Qtopia中使用哪个版本的GCC很重要? 另一件事是应该使用哪个版本的QT / Embedded?

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

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

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

    请轻松一点

    TIA

    Saeed Amrollahi Boyouki

1 个答案:

答案 0 :(得分:3)

  

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

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

  

Q值。在Qtopia中使用哪个版本的GCC很重要?另一件事是应该使用哪个版本的QT / Embedded?

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

  

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

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

  

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

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

  

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

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

基本上,你需要让qmake以mkspecs文件的形式为你的主板提供适当的支持。如果没有,基于现有的相对容易从头开始。

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

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