|
本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 10:36 编辑
搭建 Qt 开发环境
原则上,Qt的组成如下图所示,分别包括 Creator 和 Library,Creator实现代码及UI设计,并调用Qt封装提供的基于C++的Library。如果在PC端进行开发,则如下的结构即可。
在嵌入式开发领域来看,一般情况下推荐采用以下结构搭建开发的环境,如下图所示:
分别安装 Creator 和所选择的 Library ,之后在 Creator 中添加相关的“构建套件”,既可以在统一平台下对不同目标系统进行编译。
目前,暂时采用如下结构,利用 Qt5 已经包含的 QtCreator 和 Lib(for PC),另外在单独编译安装一套 Lib(for Embedded),将该支持库加入 QtCreator中对应的构造套件中。
怀疑:由于在 Qt Lib 4.8.5 中,官方提供的 Embedded 和 Linux 为同一文件,那在Qt5.2.1中,包含的 Linux Lib 是否已经统一了 x86 Linux 和 Embedded ?有待验证。
前提:
(1)已建立基本的交叉编译环境;
(2)已建立 TFTP 及 NFS 调试环境(可选);
所需资源:
(1)qt-opensource-linux-x86-5.2.1.run (388.5M)
(2)qt-everywhere-opensource-src-4.8.5.tar.gz (解压后651.8M)
[http://qt-project.org/downloads]
安装流程:
(一)安装 Qt-5.2.1
1. 从qt-project.org下载
qt-5.2.1 for linux 32-bit,下载的文件为*.run文件。
首先,修改文件属性为可执行,如下:
~$sudo chmod 777 *******.run
之后,执行该文件
~$./*********.run
2. 在解压得到的Qt5.2.1文件夹里面找到Tools运行QtCreator。
3. 之后在QtCreator里面设置bulid&run,设置编译器 。之前要预装上gcc,gdb,g++。编译器设置为gcc,调试器为gdb。
完成以上过程后,就可以在 PC 端利用 Qt 进行多种类型的应用程序的开始调试,包括 窗口和命令行模式的应用程序开发。
但是,由于所采用的编译环境依然为 x86 体系下,所产生的编译结果只能在 x86 & linux 平台下运行。为了编译产生可以运行于 ARM & Linux 平台的应用程序,必须采用交叉编译方式,在 x86 平台下编译 ARM 平台指令。
理论上说,之前所采用的“编辑器(sublimeText)+编译器(arm-linux-gcc)”的模式,已经可以生成可执行的 ARM 指令序列,在 QT 下也应该可以采用类似的交叉编译模式进行处理。但存在以下几个问题:
首先,Qt本质上是一个基于C++ 的应用程序框架,其包括大量的使用C++实现的函数库,而以后的交叉编译器是 arm-linux-gcc ,而非 arm-linux-g++ 。
其次,从Qt Project的发展过程来看,在Qt5之前的版本,Library 和 Creator是独立存在的,而且专门存在一个针对嵌入式系统的Qt库,例如Qt libraries 4.8.5 for embedded Linux。但发展到目前的Qt-5.2.1之后,就将 Library 和Creator 合并在同一个安装包内,并且仅提供 MAC,WIN,LINUX,iOS,Android 等区别,而不再专门提供嵌入式版本的函数库。查看Linux版本的发布内容,明确为qt-opensource-linux-x86-5.2.1.run,也并非 qt-everywhere-......。
目前通过网络可以检索到的资料,绝大部分均是基于 Qt5 之前的开发环境,均采用 qt-everywhere...库进行编译。
第一,嵌入式开发所使用的 Lib 与 PC 平台所使用不同的库,那即使采用 arm-linux-g++对PC端的代码进行交叉编译,也未必可以顺利获得能够在 ARM_Linux 运行的代码。
第二,现有文献和参考资料绝大部分均是 qt-everywhere 进行编译获得嵌入式版本的静态或动态运行库。暂时采用同样的方式也是为了便于学习。
基于以上所述,暂时采用 qt-everywhere 作为嵌入式开发所涉及的Qt库,不排除将来在熟悉 Qt5 的基础上,完成统一到 Qt5 下进行 x86_Linux 和 ARM_Linux 的开发。
(二)安装 Qt/Embedded-4.8.5
需要说明的是,在Qt Project 的链接里面,Qt libraries 4.8.5 for Linux/X11 和 Qt libraries 4.8.5 for embedded Linux 实际上指向的是同一个文件—— qt-everywhere-opensource-src-4.8.5.tar.gz,下载即可。
基本流程:解压 → 配置 → 生成makefile → 编译 → 安装 五个阶段。
(1)解压文件,执行命令:
tar -xvzf qt-everywhere-opensource-src-x.x.x.tar.gz
(2)转入该文件夹下,cd qt-everywhere-opensource-src-4.8.3
并执行如下命令:
./configure \
-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm-static\ -opensource \
-confirm-license \
-release \
-static \
-fast \
-nomake demos \
-nomake examples \
-nomake tools \
-depths 16,24,32 \
-no-qt3support \
-no-xmlpatterns \
-no-multimedia \
-no-audio-backend \
-no-phonon \
-no-phonon-backend \
-no-svg \
-no-webkit \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-declarative \
-no-declarative-debug \
-no-mmx \
-no-3dnow \
-no-sse \
-no-sse2 \
-no-sse3 \
-no-sse4.1 \
-no-sse4.2 \
-no-avx \
-no-neon \
-optimized-qmake \
-no-pch \
-no-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-libpng \
-no-libtiff \
-no-libmng \
-no-opengl \
-no-openssl \
-no-nis \
-no-cups \
-no-iconv \
-no-dbus \
-no-glib \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-separate-debug-info \
-embedded arm \
-xplatform qws/linux-arm-g++
具体配置参数的含义参考如下链接:[2]http://blog.csdn.net/li_hai/article/details/5006454
(3)生成makefile,执行命令:
make
(4)根据生成的makefile文件,进行按照,执行命令:
make install
另外,可以参考[http://blog.csdn.net/csf111/article/details/9324277]的结构,用同一份qt-everywhere-opensource-src-4.x.x.tar.gz,编译获得不同的 Library 支持库,再从 Creator 中添加相关的库和编译器,获得同样的跨平台开发环境。如下:
首先分别解压 tar –zxvf qt-everywhere-opensource-src-4.7.1.tar.gz,并分别复制三份,命名成qt-4.7.1-arm、qt-4.7.1-x86、qt-4.7.1-pc不同的文件夹;
其次,对每一个文件夹,在配置阶段(./configure)采用不同的参数即可获得不同的库;
接下来,使用make命令,分别生成对应的makefile:make ,这一阶段根据配置内容和范围的大小,可以历时最多3个小时;
最后,采用指令 make install完成安装。
(三)添加构造套件
选择“项目”,通过“添加构造套件”或“管理构造套件”,进入套件的编辑页面。在如下页面中,选择“构建和运行”,分别编辑“构建套件”,“Qt Visions”和“编译器”页面,添加 ARM-LINUX-G++ 编译器,
以及刚刚编译获得的qmake。
在完成如上所示的设置后,既可以看到新增的构建套件,名称设置为Qt-ARM,以区别于桌面目标系统。
在如下图所示位置,可以选择不同的目标平台,分别包括:桌面系统的调试和发布版本,远程主机(arm linux target)的调试和发布版本。
在成功编译后,即可在项目文件下看到对应版本的编译结果。
如下图所示,从左起分别为:桌面调试,桌面发布,远程调试和远程发布,以及与具体平台无关的源代码部分。
至此,最基本的跨平台编译环境已经建立,可以将编译的产生的.bin 文件,cp 到 NFS 加载的根文件系统中。
最后,将Qt/Embedded编译过程中,配置参数指定位置 /usr/local/Trolltech/QtEmbedded-4.8.5-arm-static中的如下四个函数库复制到 target 的根文件系统的相同位置,完成Qt在 ARM-LINUX 端的“移植”。
完成后,既可以在target中,通过 ./progarmName -qws 运行。
---------------------------------------
本人在这个方面非常初级,如果理解错误的地方,欢迎有更好方案的朋友提出来拍砖讨论。让大家把这个东西搞起来。
|
|