大四那年,我曾研究过如何在PC机上交叉编译出能在树莓派运行的ARM汇编程序。现在,我突发奇想,是否也能在QT Creator上配置交叉编译环境,以在嵌入式Linux上运行QT程序呢?本文将以全志V853芯片作为目标平台为例,详细介绍如何在QT Creator上配置交叉编译环境。对于其他目标平台,参数稍作修改即可。
**准备交叉编译器环境**
首先,利用全志V853开发板提供的Tina SDK包中的交叉编译器。假设Tina SDK包放置在当前用户目录下,目录名为tina-v853-open,则交叉编译器所在路径为~/.tina-v853-open/bin。接下来,将交叉编译器路径、编译器引用的库文件路径添加至环境变量。在~/.bashrc文件末尾,使用管理员权限编辑,加入以下两行代码。然后执行命令刷新环境变量。
验证交叉编译器环境是否配置好,输入特定命令,查看gcc版本,确保版本为8.3.0。
**编译QT源码**
编译目标是生成在目标平台可用的QT库以及相应的qmake。首先下载QT源码,解压至当前用户目录。接下来,修改qmake.conf文件,调整配置以适应目标平台。随后,新建目录存放编译后的QT库,配置编译选项,指定编译线程数,加快编译速度。最后,开始编译QT源码,并验证编译结果。
**配置QT Creator**
QT Creator是用于QT程序开发的IDE。若未安装,可通过相应途径获取。配置编译器时,打开QT Creator,选择“工具”->“选项”,在“编译器”一栏中添加GCC和G++编译器路径,指定名称。接着,配置交叉编译用的QT版本,通过添加qmake路径到“QT Versions”中。最后,配置Kits,设置编译器和QT版本,验证配置是否有效。
**验证测试**
新建C语言工程测试配置的交叉编译环境。在“项目”中设置环境变量,确保编译成功。通过编译后的文件指令集检查,确认程序的指令集与目标平台兼容,完成对交叉编译环境的验证。
2. 关于QT开发平台和arm嵌入式的关系。
QT与ARM没有直接的关系,QT说自己能跨平台。注意,这个平台说的不是CPU平台而是操作系统。
只要你的嵌入式设备上装有操作系统,QT程序就能在上面运行。例如:QT中有网络的概念,但是完全不同于C51的网络编程,C51里你需要知道网络芯片在总线上的地址,怎么造作网络芯片的寄存器,怎么去ENABLE它,然而QT中的网络只是着重于协议、线程等东西和硬件完全无关。
因此,学习嵌入式QT你首先要对你的ARM开发板安装操作系统,编译环境,之后,学习QT的方法和学习MFC基本上没啥区别。
最后,QT是跨平台硬件无关的,也就是说你在windows、台式机上用QT的方法与在手机、塞班系统上用QT的方法差别不大,因此你会在windows上用qt就OK了,其他的系统上不同的无非是编译与配置方法,对于这些较为死板的东西,都是要用的时候再到网上去查查的。
3. Linux嵌入式交叉编译工具链问题 浅谈
交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。有时出于减小libc库大小的考虑,也可以用别的c库来代替glibc,例如uClibc、dietlibc和newlib。交叉编译工具链主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。第一个步骤就是确定目标平台。每个目标平台都有一个明确的格式,这些信息用于在构建过程中识别要使用的不同工具的正确版本。因此,当在一个特定目标机下运行GCC时,GCC便在目录路径中查找包含该目标规范的应用程序路径。GNU的目标规范格式为CPU-PLATFORM-OS。例如,建立基于ARM平台的交叉工具链,目标平台名为arm-linux-gnu。
分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。
通过Crosstool脚本工具来实现一次编译生成交叉编译工具链。
直接通过网上(ftp.arm.kernel.org.uk)下载已经制作好的交叉编译工具链。
方法1相对比较困难,适合想深入学习构建交叉工具链的读者。如果只是想使用交叉工具链,建议使用方法2或方法3构建交叉工具链。方法3的优点不用多说,当然是简单省事,但与此同时该方法有一定的弊端就是局限性太大,因为毕竟是别人构建好的,也就是固定的没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名的错误,建议你慎用此方法。
方法1:分步构建交叉编译工具链
下载所需的源代码包
建立工作目录
建立环境变量
编译、安装Binutils
获取内核头文件
编译gcc的辅助编译器
编译生成glibc库
编译生成完整的gcc
由于在问答中的篇幅,我不能细述具体的步骤,兴趣的同学请自行阅读开源共创协议的《Linux from scratch》,网址是:linuxfromscratch dot org
。
Crosstool是一组脚本工具集,可构建和测试不同版本的gcc和glibc,用于那些支持glibc的体系结构。它也是一个开源项目,下载地址是kegel dot com/crosstool。用Crosstool构建交叉工具链要比上述的分步编译容易得多,并且也方便许多,对于仅仅为了工作需要构建交叉编译工具链的你,建议使用此方法。
运行which makeinfo,如果不能找见该命令,在解压texinfo-4.11.tar.bz2,进入texinfo-4.11目录,执行./configure&&make&&make install完成makeinfo工具的安装
下载所需资源文件linux-2.4.20.tar.gz、binutils-2.19.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和gdb-6.5.tar.bz2。然后将这些工具包文件放在新建的$HOME/downloads目录下,最后在$HOME/目录下解压crosstool-0.43.tar.gz,命
令如下:
#cd$HOME/
#tar–xvzfcrosstool-0.43.tar.gz
建立脚本文件
接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模板,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:
# cd crosstool-0.43
# cp demo-arm.sh arm.sh
# vi arm.sh
修改后的arm.sh脚本内容如下:
#!/bin/sh
set-ex
TARBALLS_DIR=$HOME/downloads#定义工具链源码所存放位置。
RESULT_TOP=$HOME/arm-bin#定义工具链的安装目录
exportTARBALLS_DIRRESULT_TOP
GCC_LANGUAGES="c,c++"#定义支持C,C++语言
exportGCC_LANGUAGES
#创建/opt/crosstool目录
mkdir-p$RESULT_TOP
#编译工具链,该过程需要数小时完成。
eval'catarm.datgcc-3.3.6-glibc-2.3.2.dat'shall.sh--notest
echoDone.
在arm.sh脚本文件中需要注意arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中arm.dat文件内容如下,主要用于定义配置文件、定义生成编译工具链的名称以及定义编译选项等。
KERNELCONFIG='pwd'/arm.config#内核的配置
TARGET=arm-linux#编译生成的工具链名称
TARGET_CFLAGS="-O"#编译选项
gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。
BINUTILS_DIR=binutils-2.19
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根据实际情况填写)
GDB_DIR=gdb-6.5
执行脚本
将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。具体执行命令如下:
#cdcrosstool-0.43
#./arm.sh
经过数小时的漫长编译之后,会在/opt/crosstool目录下生成新的交叉编译工具,其中包括以下内容:
arm-linux-addr2linearm-linux-g++arm-linux-ldarm-linux-size
arm-linux-ararm-linux-gccarm-linux-nmarm-linux-strings
arm-linux-asarm-linux-gcc-3.3.6arm-linux-objarm-linux-strip
arm-linux-c++arm-linux-gccbugarm-linux-objmpfix-embedded-paths
arm-linux-c++filtarm-linux-gcovarm-linux-ranlib
arm-linux-cpparm-linux-gprofarm-linux-readelf
然后将生成的编译工具链路径添加到环境变量PATH上去,添加的方法是在系统/etc/ bashrc文件的最后添加下面一行,在bashrc文件中添加环境变量
export PATH=/home/jiabing/gcc-3.3.6-glibc-2.3.2/arm-linux-bin/bin:$PATH
至此,arm-linux下的交叉编译工具链已经完成,现在就可以使用arm-linux-gcc来生成试验箱上的程序了!
4. 什么是嵌入式 Qt
Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。Qt原为奇趣科技公司(Trolltech,www.trolltech.com)开发维护,已被nokia公司收购,在nokia的推动下,Qt的发展非常快速,版本不断更新。目前最新的Qt主版本为4.8.1,所支持的平台如下图所示:
EasyARM-iMX283提供已交叉编译好的Qt库(Qt-4.8.0),用户无需编译,系统已经将Qt库文件集成到了交叉编译器中。用户将得到此库的两份拷贝,一份内嵌在交叉编译工具链中,供编译时链接使用。一份内嵌在目标板文件系统中,放置在系统库目录下,供Qt程序运行时动态加载使用