因为项目需要,我们需要在开发板上使用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开发环境下显示出的界面基本相同。

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

编译 arm 版的qt的更多相关文章

  1. DM8168 OpenCV尝试与评估(编译ARM版OpenCV)

     交叉编译opencv2.3.1,并在DM8168 cortex A8中执行图像处理. 开发环境: PC:ubuntu12.04LTS.Intel Core 2 Duo CPU  E7200@2. ...

  2. ubuntu12.04下编译安装x86平台qt库qt-everywhere-opensource-src-4.8.5

    本文记录PC(x86)下安装Linux/X11版Qt 开发环境.下载页面:http://qt-project.org/downloads ARM嵌入式版本qt库的编译安装详见<unbunt12. ...

  3. CentOS 7 ARM 版发布:支持树莓派2/香蕉派/CubieTruck

    CentOS 7 ARM 版发布:支持树莓派2/香蕉派/CubieTruck 来自CentOS团队的Karanbir Singh很高兴地宣布,面向ARM硬件架构的CentOS 7 Linux已经正式发 ...

  4. Linux 下编译并安装配置 Qt 4.53全过程

    最近准备做 Nokia 的 Symbian,Maemo 下触摸屏开发.考虑到程序的跨平台可移植性,最终选择使用 Qt 开发.相对来说,国内关于 Qt 相关文档并不算很多.作者将 Linux 下编译并安 ...

  5. 减少Qt编译时间暨简单Qt裁剪

    本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息.原文链接.原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途. 谢谢合作.原文链接:减少Qt编译时间暨简单Qt裁剪 编译一 ...

  6. VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4

    对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...

  7. 使用VC2005编译真正的静态Qt程序

    首先,你应该该知道什么叫静态引用编译.什么叫动态引用编译.我这里只是简单的提提,具体的可以google一下. 动态引用编译,是指相关的库,以dll的形式引用库.动态编译的Exe程序尺寸比较小,因为相关 ...

  8. Android x86 下运行纯ARM版APP

    Android x86 默认不带houdini,运行纯ARM版会提示: 很抱歉,”xxxx”已停止运行 设置->应用兼容性->打开 终端模拟器 $ su# enable_nativebri ...

  9. 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

随机推荐

  1. linux命令(40):at命令

    1.命令格式: at[参数][时间] 2.命令功能: 在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程( ps -ef | grep atd查看, 开启用/etc/init.d/a ...

  2. C语言 ,两个字符串参数,判断是否包含另一个字符串,返回所在位置

    char * cyp(char *s1,char *s2) { char *p = NULL; char *q = NULL; char *q1 = NULL; while(*s1!='\0') { ...

  3. cocos2d-js中怎么删除一个精灵

    添加元素时,有Name属性 var child = parent.addChild(label, 1, "元素的名字"); 或者给child设置tag child.setTag(& ...

  4. ZOJ 1610.Count the Colors-线段树(区间染色、区间更新、单点查询)-有点小坑(染色片段)

    ZOJ Problem Set - 1610 Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting s ...

  5. 洛谷P2783 有机化学之神偶尔会作弊

    题目传送门 啦啦啦,发个文纪念一下第一道在洛谷上A的黑题,一次性就过真是无比舒服-(虽然某些大佬说这题有点水……)题目其实思路不难,Tarjan缩点+LCA,不过因为是无向边,所以在Tarjan的时候 ...

  6. 使用Spring JdbcTemplate实现CLOB和BLOB的存取

    概述 本文讲述通过Spring的JdbcTemplate来读写数据库大字段的实现方案,在一位网友的一篇博客的基础上,查看api文档整理而成. 写实现 JdbcTemplate jdbcTemplate ...

  7. ES5 的 Array

    1: Array.isArray判断是否为数组 Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false // Pol ...

  8. 【多重背包】CDOJ1691 这是一道比CCCC简单题经典的中档题

    #include<cstdio> #include<algorithm> using namespace std; int n,V,w[110],c[110],a[110],f ...

  9. 【强连通分量缩点】【拓扑排序】【dp预处理】CDOJ1640 花自飘零水自流,一种相思,两处闲愁。

    题意: 在n个点m条边的有向图上,从1出发的回路最多经过多少个不同的点 可以在一条边上逆行一次 题解: 在同一个强连通分量中,显然可以经过当中的每一个点 因此先将强连通分量缩点,点权为强连通分量的点数 ...

  10. 【判断解是否可行-二分】POJ1064-Cable master

    http://poj.org/problem?id=1064 [题目大意] 给出几条绳子的长度,问如果要切出k条长度相等的绳子,这k条绳子最常多长? [思路] 二分.把下界设为0,上界设为所有绳子长度 ...