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

亲爱的所有{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 

该项目的主要目的是为embedded式手持设备开发一个使用QT / Embedded Linux的GUI。

主机(开发机器)上命令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

embedded式ARM设备上的命令uname -a的输出是:

Liunx友好ARM 2.6.32友好ARM#5星期三6月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)在桌面Linux机器(主机)上编写了一个简单的GUI,

  2. 基于知识,过去两个月我从书籍和互联网上获得了有关交叉编译,工具链和其他许多相关概念,我发现我必须安装另一个叫做Qtopia的Qtopia软件,它是QT的embedded式版本。 我尝试安装最新版本的Qtopia,名为qtopia-core-opensource-src-4.3.5,在configuration,构build和制作软件时遇到了很多问题。 一个问题是主机上的g ++是4.8.1(非常新的),但Qtopia是大约7年前的事情。 当我尝试从源代码构buildQtopia时,g ++编译器会发出几个C ++错误,例如:

    错误:'ptrdiff_t'没有命名一个types错误:'append'没有在这个范围内声明,没有声明,通过依赖于参数的查找find

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

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

问:是否需要像Qtopia一样使用QT / Embedded的旧版本,或者我可以使用像qt-everywhere-opensource-src-4.8.4这样的新版本?

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

正如你所看到的,我忘记了从主机到embedded式设备的交叉编译和写入软件的细节。 在使用QT和在桌面版本中编写C ++方面,我几乎没有任何问题。 最后,我感谢您给出一个从x86 GCC到FreindlyARM平台交叉编译的一般而实用的指南/提示。

请说明一下

TIA

Saeed Amrollahi Boyouki

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

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

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

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

问:是否需要像Qtopia一样使用QT / Embedded的旧版本,或者我可以使用像qt-everywhere-opensource-src-4.8.4这样的新版本?

不。实际上,不要使用古老的Qtopia,尽量使用像Qt 5.2这样的Qt最新版本。 原因很简单,就是设计上的缺陷,而且这些天没有维护。

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

不,实际上几乎总是不一样的。 这是由于Linux内核的种类很多,被不同的发行版或分发生成器所使用。

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

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

基本上,您需要使qmake以mkspecs文件的形式对您的主板提供适当的支持。 如果不是这样,在现有的基础上从头开始就比较容易。

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

我也建议在QtCreator作为一个新手,可以正确配置“工具包”,定制部署步骤等方面给予一些考虑。它有很多内置的交叉工具链开发支持。