历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2020年02月15日 | 编译 arm 版的qt

2020-02-15 来源:eefocus

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


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


推荐阅读

史海拾趣

GradConn Ltd公司的发展小趣事

随着业务的不断扩展,GradConn意识到全球化布局的重要性。公司不仅在台湾设立总部,还在英国和美国建立了生产设施,并通过遍布160个国家的销售和分销网络,为客户提供全方位的支持。这种全球化布局不仅提升了GradConn的市场竞争力,还使其能够更好地服务全球客户,确保产品能够及时、准确地送达世界各地。

Future Designs, Inc. (FDI)公司的发展小趣事

FDI深知客户需求的重要性,因此他们始终将客户服务放在首位。公司建立了一套完善的客户服务体系,从售前咨询、方案设计到售后支持,全程为客户提供专业、贴心的服务。此外,FDI还针对客户的特定需求,提供定制化解决方案。他们能够从概念设计、原型开发到大规模生产,全程参与客户的项目,确保产品能够完全符合客户的期望和要求。这种服务模式赢得了客户的广泛赞誉和信赖。

APTA Group Inc公司的发展小趣事

在电子行业的发展过程中,APTA Group Inc也遭遇了不少挑战。例如,原材料价格的波动、国际贸易环境的变化等都曾给公司带来不小的压力。然而,APTA并未被这些困难击垮,而是积极调整战略,优化生产流程,降低成本,提高产品质量。这种在挑战中展现出的韧性和应变能力,使得APTA能够在逆境中保持稳健的发展态势。

AURORA公司的发展小趣事

在自动驾驶技术快速发展的同时,AURORA公司也积极寻找商业化突破口。公司创始人认为,自动驾驶卡车商业化是一个具有巨大潜力的市场。因此,AURORA优先瞄准了自动驾驶卡车商业化领域,与FedEx、Paccar、Schneider、Werner和Xpress等多家平台公司建立了试点合作关系。通过在实际场景中测试和验证自动驾驶技术,AURORA不断积累经验和数据,为未来的商业化落地奠定了坚实基础。

这五个故事展示了AURORA公司在电子行业中的发展历程和取得的成就。从初创时期的挑战与机遇到技术实力的不断提升,再到与汽车制造商的深度合作、垂直产业链的整合与布局以及自动驾驶卡车商业化的探索,AURORA公司凭借其卓越的技术实力和前瞻性的战略眼光,在电子行业中逐渐崭露头角。未来,我们有理由相信AURORA将继续在自动驾驶领域取得更多突破和创新。

Hitachi (Renesas )公司的发展小趣事

AURORA公司一直致力于提升自动驾驶技术的安全性和可靠性。通过不断研发和创新,AURORA在自动驾驶算法、传感器融合、数据处理等方面取得了显著进展。公司的技术团队不断攻克技术难题,推动自动驾驶技术向更高等级迈进。同时,AURORA还积极与高校和研究机构合作,共同推动自动驾驶技术的研发和应用。

川晶科技公司的发展小趣事

川晶科技自创立之初,就专注于石英晶体频率元器件的研发。公司投入大量资源进行基础技术的探索和创新,不断突破技术瓶颈。经过多年的努力,川晶科技在石英晶体领域取得了显著的技术成果,其产品性能达到了行业领先水平。公司凭借卓越的技术实力,赢得了市场的广泛认可,为公司的快速发展奠定了坚实的基础。

问答坊 | AI 解惑

高质量电子产品设计解决方案(经典)

综合电子资料 高质量电子产品设计解决方案(经典)[][] …

查看全部问答>

请问什么是PIN衰减器 PIN移相器?

请问什么是PIN衰减器 PIN移相器?…

查看全部问答>

路灯不同时间段的开关控制

路灯不同时间段的开关控制 各位单片机之友们,你们好!冒昧的请教一个问题。看看我这个问题该则么解决,用单片机或者其他的吧。 要求:1.传感器2个,并联来感应控制路灯的开关(全亮) 2.LED路灯5个,各1W,控制如下: 早上 7:00--19:00不亮&n ...…

查看全部问答>

wince eboot之flash管理问题

我使用S3C2410芯片和K9F1208的FLASH。现在我的EBOOT可以实现直接下载NK.BIN并在RAM中启动,但是无法在FLASH中启动。 超级终端显示如下: TFTP: Desktop losing ACK, block number = 18570, Ack again TFTP: Desktop losing ACK, block number = ...…

查看全部问答>

请教个问题

请问哪里可以找到wind river的snmp v2或者v3的代码包 如果全的话 包里一共是多少个文件 谢谢大家了 …

查看全部问答>

关于EE_FPGA_V2.0 功能设计的一些说明

EE_FPGA_V2.0功能设计如下:   1. LED 2. 按键 3. UART <-> USB 4. NOR FLASH 5. SDRAM 6. SD Module 7. E2PROM 8. 红外模块 9. 总线扩展、IO扩展   为什么设计以上功能的一些说明:   1)LED和按键是经典的输入 ...…

查看全部问答>

msp430的adc模块关于负参考电压值是多少

在MSP430 的adc模块中我知道VR+,和VR-的选择决定输入信号的范围,现在我要采集一个正负1v的正弦信号,只知道如果用VR+我选择vref+(内部正参考电压)的话可以设置为1.5v或者2.5v。但是,VR-我想用vref--,如果是vref-的话怎么知道他的电压值,是-1.5v ...…

查看全部问答>

430PWM和中断能同时用定时器A实现吗

430PWM和中断能同时用定时器A实现吗…

查看全部问答>

宝工的东西好用吗?

本帖最后由 minjiang 于 2014-7-22 20:08 编辑 现在喜欢耍嘴皮子的人越来越多了,干活的人到少了。最近教育部好像在提 以后很多学校要改成技术类的学校,包括985类的高校。不过现在高校又有 多少老师能真正干活呢?在这里大家来讨论从事电子行 ...…

查看全部问答>

晒WEBENCH设计的过程+设计IPAD供电电源

设计IPAD充电器电源 普通的手机充电器电源额定电流普遍都小于1A(5V),而IPAD专用充电器的额定电流都在2A。我以前用500mA的手机充电器试图给IPAD充电,结果就是没反应,插上后IPAD连充电标志都没有显示。因此普通手机充电器是无法给IPAD充电。如何 ...…

查看全部问答>