因为项目需要,我们需要在开发板上使用QT开发平台,因此需要编译一个arm版的QT. 在网上找了一些资料,费了几天时间,终于成功了。

第一步,准备源码

先下载QT 源码,在http://qt-project.org/downloads页面,找到Qt
libraries 4.8.6 for embedded Linux (230 MB)
(Info), down 下来,拷贝到linux系统下。

解压缩,tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz

qt 源码将被解压到qt-everywhere-opensource-src-4.8.6下。

第二步,准备编译器

然后安装交叉编译器,我们的arm 平台编译器已经安装好,安装在 /home/xyz/arm/ 目录下。

为了使QT 配置程序能找到我们的编译器,必须把交叉编译器所在的目录放到PATH环境变量上。

export PATH=$PATH:/home/xyz/arm/bin

第三步,配置,编译,安装

然后到QT的源码所在目录下,

再进到qws目录下

cd mkspecs/qws

ls 看一下,有一个适合我们的配置,就是linux-arm-gnueabi-g++ ,如果没有,就自己建一个目录,然后从别的目录下拷贝这两个文件

qmake.conf

qplatformdefs.h
进入到linux-arm-gnueabi-g++目录,看一下qmake.conf 的内容,如下:

QMAKE_CC                = arm-none-linux-gnueabi-gcc
QMAKE_CXX               = arm-none-linux-gnueabi-g++
QMAKE_LINK              = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = arm-none-linux-gnueabi-strip

正确,我们就使用这个配置,如果不正确,可以改成自己的编译器的名字。

接下来配置QT, 在QT的源码目录下有一个可执行程序 configure, 运行./configure --help 可以看到详细的配置选项,

为了操作方便,可以写一个脚本文件,文容如下

./configure \
-embedded arm \
-xplatform qws/linux-arm-gnueabi-g++ \
-release \
-opensource  \
-fast  \
-stl \
-no-accessibility  \
-no-scripttools  \
-no-mmx  \
-no-multimedia  \
-no-svg  \
-no-3dnow  \
-no-sse  \
-no-sse2  \
-no-libmng  \
-no-libtiff  \
-no-multimedia  \
-silent  \
-qt-libpng  \
-qt-libjpeg  \
-make libs  \
-nomake tools \
-nomake examples \
-nomake docs  \
-nomake demos \
-nomake translations \
-no-nis \
-no-cups \
-no-iconv  \
-no-dbus  \
-no-openssl  \
-little-endian \
-qt-freetype  \
-depths all \
-qt-gfx-linuxfb  \
-no-gfx-transformed  \
-no-gfx-multiscreen  \
-no-gfx-vnc  \
-no-gfx-qvfb  \
-qt-kbd-linuxinput  \
-no-glib  \
-no-phonon \
-no-phonon-backend \
-no-webkit \
-no-javascript-jit \
-no-sql-db2  \
-no-sql-ibase \
-no-sql-mysql \
-no-sql-oci \
-no-sql-odbc \
-no-sql-psql \
-no-sql-sqlite \
-no-sql-sqlite2 \
-no-sql-sqlite_symbian \
-no-sql-symsql  \
-no-sql-tds \
-no-qt3support \
-qt-mouse-linuxinput \
-no-mouse-tslib \
-no-mouse-linuxtp \
-no-script \
-no-largefile

保存,取名了qt.config.sh

这个配置几乎把QT裁剪到了最小尺寸,运行此脚本,生成Makefile,

然后gmake, 这个过程很慢,请耐心等待。

然后gmake install, QT 库被安装到  /usr/local/Trolltech/QtEmbedded-4.8.6-arm

第四步,测试QT arm 开发环境

QT arm 版已经编译,安装完成。测试一下QT arm 开发环境

设置环境变量

export ARMQDIR=/usr/local/Trolltech/QtEmbedded-4.8.6-arm

export PATH=$ARMQDIR/bin:$PATH

export MANPATH=$ARMQDIR/man:$MANPATH

export LD_LIBRARY_PATH=$ARMQDIR/LIB:$LD_LIBRARY_PATH

执行qmake -v, 显示以下信息

QMake version 2.01a
Using Qt version 4.8.6 in /usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

执行which qmake, 显示

/usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake

编写一个hello world 程序

#include <QApplication>
#include <QDebug>

int main(int argc,char *argv[])
{
        qDebug("Hello, welcome to Qt world!");
        return 0;
}

保存为hello.cpp

执行qmake -project hello.cpp -o hello.pro

生成hello.pro

执行qmake hello.pro

生成Makefile

执行 make, 生成hello.o, hello

这一步遇到一个奇怪的问题,就是如果工作目录下包含了子目录,则运行qmake就会hang在那儿,这不知是不是QT的bug.

第五步,下载到开发板

首先在开发板的linux 系统下建立同名的目录,以便拷贝,

/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

然后把/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib目录下的文件全部拷贝过去,我是打了一个包,然后用tftp传过去的。

然后把 libstdc++.so.6.0.9 和libz.so.1.2.3 传送到开发板的 /usr/local/lib 目录下,

设置环境变量 LD_LIBRARY_PATH 以便使QT 程序能找到相应的库,

export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib:/usr/local/lib

运行QT测试程序

testgui -qws

lcd 显示屏上显示出一个窗口界面,和在windows开发环境下显示出的界面基本相同。

至此,算是成功了。不过还没有做对触摸屏的支持。

最新文章

  1. 断言与异常(Assertion Vs Exception)
  2. php文件之间传值的三种主流并且常用的方式
  3. 线程同步以及yield()、wait()、Notify()、Notifyall()
  4. 轻量级router[类似laravel router]
  5. 夺命雷公狗—angularjs—3—表单验证的高级用法
  6. linux查看文件个数命令
  7. NOI2010航空管制
  8. kbengine新手教程
  9. 如何将Android Studio与华为软件开发云代码仓库无缝对接(二)
  10. 创建虚拟目录失败,必须为服务器名称指定“localhost”
  11. Docker数据卷容器备份、恢复
  12. golang变量声明
  13. linux下git怎么保存账号密码
  14. mysql官方测试 DB
  15. 微信内置浏览器私有接口WeixinJSBridge介绍
  16. iOS App与iTunes文件传输的方法和对iOS App文件结构的说明
  17. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
  18. The record of Rf module debugging (1)
  19. Linux命令--压缩解压(简化版)
  20. C#之#if #endif的简单用法

热门文章

  1. LeetCode218. The Skyline Problem
  2. OFBIZ 10.04 开发环境搭建(ofbiz+mysql+eclipse)
  3. 四十一 常用内建模块 datetime
  4. nginx代理缓存
  5. centos 新增用户, 然后他在主目录添加网站403Forbbiden
  6. POJ 1655.Balancing Act-树的重心(DFS) 模板(vector存图)
  7. 基于wsimport生成代码的客户端
  8. 洛谷—— P1908 逆序对
  9. 洛谷——P1748 H数
  10. eclipse 设置英文