编译 arm 版的qt

2020-02-15来源: eefocus关键字:编译  arm    qt

因为项目需要,我们需要在开发板上使用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

#include


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 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488331.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:Exynos4412交叉编译环境搭建
下一篇:三星S3C6410(ARM1176)平台Android资源获取与编译(RedHat AS5)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Ubuntu下Arm-Linux-GCC交叉编译环境的搭建
1:解压 arm-linux-gcc-3.4.1.tar.bz2  #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2  解压过程需要一段时间,解压后的文件形成了 ../temp/usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下  # cd usr/local/  #cp -rv arm /usr/local/  现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了2:修改/etc/profile文件:# vim /etc/profile增加路径设置,在末尾添加如下,保存/etc/profile文件:export PATH=$PATH
发表于 2020-02-24
HI-TECH PICC 编译器如何生成库文件
简介:文章主要介绍了HI-TECH PICC 编译器如何生成库文件在MPLAB IDE环境中是不能够直接生成HI-TECH编译器库文件的。只能通过HI-TECH自带的生成工具在命令行中转换。HI-TECH编译器生成库文件类型有两种类型p-code库文件和object库文件,后缀名分别为.lpp和.lib。 这两种库文件分别对应C语言和汇编语言编写的模块程序。p-code库文件是由C语言编写的模块程序转换而来,C语言模块程序编译后的后缀名为.p1(注意不是.pl)。object库文件是由汇编语言编写的模块程序转化而来,汇编模块编译后的后缀名为.obj。你可以在编译之后的工程目录里找到.p1文件和.obj文件。HI-TECH编译
发表于 2020-02-20
PICC18编译器命令行驱动及其应用
简介:PIC18F系列产品是美国微芯科技公司的高档产品,用户多采用C语言进行编程设计, 大部分应用者使用MPLAB集成环境进行编程,在一些重要或大型应用的开发中有一些问题。例如,如何编写C语言的库文件,如何对有代码限制的程序进行编译等,若只是采用传统方式编程,则达不到应有的效果。本文所阐述的HI-TECH C编译器的PICCl8命令行驱动,正是要解决这些问题。1 HI-TECH C编译器HI-TECH C编译器提供了C语言的标准特性,同时还加上许多为了适应PIC系列单片机的特定硬件特性而设计的扩展功能,并与汇编器集成在一起提供共享链接器和库管理工具,因而应用较为广泛。当编译一个程序时,就有许多操作既可由命令行驱动程序CLD
发表于 2020-02-19
PICC18编译器命令行驱动及其应用
libxml2 ARM 交叉编译
编译过程比较简单1.wget ftp://xmlsoft.org/libxml2/libxml2-2.7.2.tar.gz2.tar xvf libxml2-2.7.2.tar.gz3.cd libxml2-2.7.24../configure CROSS_COMPILE=arm-linux- --host=arm-linux --prefix=/opt/libxml25.make6.sudo  make install此时出现一个错误:./libtool: line 6619: arm-linux-ranlib: command not found make
发表于 2020-02-17
交叉编译Python-2.7.13到ARM(aarch64)平台
方法跟交叉编译Python-2.7.13到ARM(aarch32)平台基本一样, 不同的地方只是把工具链换成编译aarch64的工具链,这里可以参考用qemu搭建aarch64学习环境.创建目录:mkdir python2_7_13_for_aarch64下面是配置、编译和安装的脚本:1、配置: mk1_conf.sh 1 #!/bin/bash 2  3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH 4 
发表于 2020-02-16
交叉编译Python-2.7.13到ARM(aarch32)—— 支持sqlite3
环境主机: ubuntu14.04 64bit开发板: qemu + vexpress-a9 (参考: http://www.cnblogs.com/pengdonglin137/p/6442583.html)工具链: arm-none-linux-gnueabi-gcc  (gcc version 4.8.3 20140320)Python版本: Python-2.7.13前面一篇博文(交叉编译Python-2.7.13到ARM(aarch32)平台)介绍了移植python到aarch32上面,但是发现有很多模块都不能用,可以在板子上面执行下面的命令测试一下: 1 [root@vexpress
发表于 2020-02-16
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved