我也来祝贺qt开版-qt4.5.3在嵌入式(arm)的移植

chenfeng2002 2009-12-10 11:52:24
加精
为了祝贺qt开版,我把移植qt4.5到嵌入式的过程和大家分享,更希望一起交流,共同学习!~


解压并进入Qt目录:
tar –zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
cd qt-embedded-linux-opensource-src-4.5.3
注意:不能修改解压后的qt目录名,否则无法编译通过,提示的错误信息不确定。
1. 编译qt工具
在交叉编译qt库的过程中,需要用到qt提供的工具,包括moc、uic、rcc等。这些工具是在编译主机上运行的,如果我们一开始就直接交叉编译,那么编译出来的这些工具是目标体系的,当在主机需要使用这些工具的时候无法运行,提示出错:
-bash ../bin/moc: cannot execute binary file
所以需要对这些工具进行单独编译(非交叉),在Qt目录下运行:
./configure #配置
cd src/tools/bootstrap #进入工具目录
./../../bin/qmake –unix #生成Makefile
make #编译
cd ../moc #进入moc工具目录
./../../bin/qmake –unix #生成Makefile
make #编译
cd ../rcc #进入rcc工具目录
./../../bin/qmake –unix #生成Makefile
make #编译
cd ../uic #进入uic工具目录
./../../bin/qmake –unix #生成Makefile
make #编译
如果编译顺利通过,可以在qt目录的bin目录下看到moc、rcc、uic等工具。
2. 修改配置脚本
Qt4.5的嵌入式版本已经有了支持arm、mips、ppc等体系的配置脚本,但是它里面的arm配置脚本只针对标准的arm交叉编译器arm-linux-g++等,如果你的交叉编译器不是这个,需要建立自己的配置脚本。修改已有的arm配置脚本然后。在qt目录下运行:
cd mkspecs/qws/linux-arm-g++ # 进入配置脚本所在目录
vi qmake.conf # 打开配置脚本
内容修改为如下所示后保存退出(其他内容不变)。
QMAKE_CC = arm_v5t_le-gcc #我们用的是ti的平台
QMAKE_CXX = arm_v5t_le-g++
QMAKE_LINK = arm_v5t_le-g++
QMAKE_LINK_SHLIB = arm_v5t_le-g++

# modifications to linux.conf
QMAKE_AR = arm_v5t_le-ar cqs
QMAKE_OBJCOPY = arm_v5t_le-objcopy
QMAKE_STRIP = arm_v5t_le-strip
3. 选择配置选项
配置选项的选择是关键工作,必须认真仔细,可参考的信息有README、INSTALL文件和配置帮助信息,其中配置帮助信息最为重要。在qt目录下运行:
./configure –h
可看到大量的帮助信息,根据需要配置,初步得到的配置选项如下:
./configure --prefix=/usr/qt -opensource -fast -no-largefile -no-sql-QtSql -no-qt3support -no-xmlpatterns -no-phonon -no-phonon-backend -no-svg -no-webkit -no-mmx -no-3dnow -no-sse -no-sse2 -no-libtiff -qt-libpng -no-libmng -no-libjpeg -no-openssl -no-opengl -no-nis -no-cups -no-iconv -no-dbus -xplatform qws/linux-davinci-g++ -embedded arm –arch arm -no-armfpa -little-endian -host-little-endian –qt-freetype -nomake demo -nomake examples -nomake tools -nomake docs -depths 16,18,24 -no-glib

-xplatform qws/linux-arm-g++指定的为上小节修改的脚本。另外的一些选项指示去掉不需要的模块,初步实现了模块裁剪。
为了方便以后的配置,我把这些配置命令存放到一个自己建立的脚本conf.sh,以后再需要再次配置时只需要在qt目录下运行如下命令即可:
. ./conf.sh
4. 编译
Qt源码树下包含了大量的模块库和第三方库,虽然我们在配置选项中把一些模块库去掉,但是这只是表明qt库不依赖去掉的模块库,并不代表qt的脚本不编译这些库。实际上默认情况下qt编译源码树中所有的库代码,这就大大增加了编译过程出错的可能,而我们只需要其中很少的一部分,所以我们不在qt目录下运行make编译命令,而是进去到我们需要的模块库目录中手动单独编译。
首先编译qt核心库(corelib),在qt目录下运行:
cd src/corelib/ # 进入核心库目录
./../../bin/qmake –unix # 手动生成Makefile
make # 编译
如果编译顺利通过,会在qt目录下的lib目录中生成libQtCore.so系列库文件。然后编译网络库(network),在qt目录下运行:
cd src/network/ # 进入网络库目录
./../../bin/qmake –unix # 手动生成Makefile
make # 编译
如果编译顺利通过,会在qt目录下的lib目录中生成libQtNetwork.so系列库文件。接着编译界面库(gui),在qt目录下运行:
cd src/gui/ # 进入界面库目录
./../../bin/qmake –unix # 手动生成Makefile
make # 编译
如果编译顺利通过,会在qt目录下的lib目录中生成libQtGui.so系列库文件。至此,我们需要的库编译完成了,通过ls –lh 命令查看发现这些库文件的大小分别为:
libQtCore.so.4.5.3 3.0M
libQtNetwork.so.4.5.3 1019K
libQtGui.so.4.5.3 12M
5. 测试qt库
本次测试使用的设备没有鼠标键盘等设备,采用nfs方式挂接远程文件系统到设备上。在目标文件系统中新建目录:
mkdir /usr/qt # 创建目录
chmod –R 777 /usr/qt # 修改目录权限属性
该路径与配置的安装路径(--prefix=/usr/qt)一致,然后把主机上Qt目录下的lib整个文件夹拷贝过来。交叉编译qt源码树中的一个示例程序,本次编译的例子为qt目录下的:
examples/mainwindows/application
编译完成后把生成的可执行文件application拷贝到目标文件系统的根目录下,运行:
./application –qws
提示以下信息:
Cannot open keyboard: No such device or address
程序可正常运行,显示器清晰正确显示程序界面,说明qt库的移植已成功。

后面我还需要做大量的裁剪工作,希望和有共同喜好的大侠学习!~
...全文
5304 91 打赏 收藏 转发到动态 举报
写回复
用AI写文章
91 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjuxiao 2012-02-14
  • 打赏
  • 举报
回复
运行Qt4程序后怎样退回arm开发板上Qt2的主界面呢?
wangchuan3533 2011-07-26
  • 打赏
  • 举报
回复
有个问题
configure配置时应该是-nomake demos,而不是-nomake demo,否则configure过程会有问题
貌似是找不到libss
这是sed的字符串处理造成的本来是*libs demos*,删掉' demo'后就变成了libss,这样就没有意义了
这样的话直接make会出错的,因为很多makefile都没有升成。
tuohai25 2011-05-02
  • 打赏
  • 举报
回复
很好啊,学习一下
hiok520 2010-12-25
  • 打赏
  • 举报
回复
来了就是客,学习一下经验。
ssolriu 2010-10-27
  • 打赏
  • 举报
回复
qt编译好复杂啊..............
a994179653 2010-10-24
  • 打赏
  • 举报
回复
顶~~~~~~~~~~~~~~~~~~~~~~~~
crepso1007 2010-10-23
  • 打赏
  • 举报
回复
多点这类的文章!
enum_623 2010-10-22
  • 打赏
  • 举报
回复
好贴!
byr5401 2010-10-22
  • 打赏
  • 举报
回复
QT 哈哈 老师也要我用这个
c_cacal 2010-07-27
  • 打赏
  • 举报
回复
恭喜,加油
xiuxianshen 2010-07-27
  • 打赏
  • 举报
回复
ppcst 2010-07-23
  • 打赏
  • 举报
回复
/mnt/yaffs]./scooters -qws
QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers:

请教LZ遇到这个问题的原因和解决方法?
mercedes2 2010-07-21
  • 打赏
  • 举报
回复
good!
长公子冰 2010-07-21
  • 打赏
  • 举报
回复
恭喜楼主!
ppcst 2010-07-19
  • 打赏
  • 举报
回复
邮箱ppcst@qq.com
ppcst 2010-07-19
  • 打赏
  • 举报
回复
发给我 我也就要成功了
ppcst 2010-07-19
  • 打赏
  • 举报
回复
先恭喜了,希望lz帮个忙,arm-linux-gcc 4.3.2 中的libgcc_s.so.1库发给我,非常谢谢
  • 打赏
  • 举报
回复

LZ把事情搞复杂了,所谓的进入目录单独编译的问题是不存在的,直接configure就行了
sunboyqq23 2010-06-19
  • 打赏
  • 举报
回复
顶。。。。
IT_Peak 2010-06-19
  • 打赏
  • 举报
回复
谢谢楼主的分享
加载更多回复(70)
郭天祥ARM9视频教程(第13讲和第20讲均可观看) ARM9视频教程清单: 第一部分 嵌入式系统开发流程概述 第一讲 嵌入式基础知识 1. 嵌入式的定义、特点、应用 2. 嵌入式硬件结构 3. 嵌入式软件结构 第二讲 如何学习嵌入式 1. 嵌入式系统开发流程 2. 视频内容介绍 3. 学习嵌入式的方法 4. 使用TX-2440A开发项目 第二部分 开发板功能演示 第三讲 TX-2440A开发板外围硬件介绍 1. 核心板资源介绍 2. 底板资源介绍 3. 外围模块介绍 第四讲 TX-2440A开发板功能演示 1. 整板测试 2. 终端下硬件测试 3. 应用程序演示 4. QT图形界面演示 第三部分 嵌入式开发平台搭建 第五讲 Linux操作系统的安装 1. Linux简介,内核,桌面环境介绍 2. 安装虚拟机和Linux操作系统 3. 配置smb,nfs服务器 第六讲 Linux操作系统全面分析 1. Linux常用命令 2. vi编辑器 3. gcc编译器 4. make工具使用,makefile编写 5. shell编程 Linux系统编程专题 第七讲 建立交叉编译环境 1. 编译原理,gcc的使用 2. 交叉编译原理 3. 交叉编译工具安装使用 4. 交叉编译实例分析 第八讲 Windows平台工具使用 1. SecureCRT的安装使用 2. Notepad++的使用 3. ADS集成开发环境的安装 4. HJTAG工具的使用 5. USB驱动的安装 6. 使用USB下载程序 第四部分 嵌入式硬件 第九讲 ARM9体系结构,S3C2440处理器 1. ARM处理器介绍 2. ARM编程模型和异常中断 3. S3C2440系统结构及片上资源介绍 4. S3C2440时钟电源管理 5. S3C2440的中断体系结构 第十讲 S3C2440主存储器配置 1. S3C2440存储控制器特性 2. SDRAM原理分析 3. NandFlash原理分析 第十一讲 ADS工具的使用,建立硬件调试环境 1. 建立ADS工程 2. 系统代码和NandFlash代码分析 3. 使用HJtag和Jlink调试硬件 4. GPIO原理分析,编写LED驱动 第十二讲 TX-2440A开发板硬件原理分析 1. 按键与外部中断 2. RTC与定时器 3. ADC与触摸屏 4. 串口与IrDA 5. SPI与CAN总线 6. LCD与Camera LCD专题 第五部分 嵌入式系统移植之bootloader 第十三讲 Bootloader原理和vivi的移植 1. bootloader概述 2. vivi的启动过程分析 3. vivi的配置移植 4. vivi命令详解 第十四讲 uboot原理分析及移植 1. uboot简介 2. uboot源码目录结构 3. uboot运行代码分析 4. uboot在TX2440A上移植 5. uboot常用命令讲解 uboot使用专题 第六部分 嵌入式系统移植之linux内核 第十五讲 Linux内核分析和配置 1. 内核源码目录结构分析 2. Makefile,Kconfig文件分析 3. Linux启动过程分析 4. 配置、编译内核 第十六讲 向内核中加入驱动 1. 支持NAND和yaffs2,挂载文件系统 2. 基本外围设备的配置(LCD、触摸屏、网卡、声卡,SD卡、USB设备、摄像头) 3. 向内核中加入驱动模块(LED、按键、蜂鸣器、AD、DS18B20) 第七部分 嵌入式系统移植之构建根文件系统 第十七讲 用busybox制作根文件系统 1. 嵌入式文件系统介绍 2. Linux目录结构详解 3. 配置,编译busybox 4. 完善根文件系统 5. 制作yaffs镜像 第十八讲 应用程序的移植 1. NFS文件系统的挂载 2. 移植嵌入式web服务器Boa 3. 移植madplay音乐播放器 第八部分 嵌入式驱动开发 第十九讲 Linux字符设备驱动 1. 嵌入式设备驱动概述 2. Linux字符设备驱动结构 3. 字符设备驱动程序设计实例 4. 中断和同步的处理 第二十讲 其他类型设备驱动 1. Linux块设备驱动框架 2. MTD设备驱动分析 3. LCD驱动,音频驱动简介 4. 网络设备驱动分析 第九部分 QT图形界面开发 第二十一讲 QTQtopia介绍 1. 嵌入式GUI简介 2. Qt概述,Qt/X11的安装(Qt-4.5.3) 3. Qtopia概述 第二十二讲 QtARM平台的移植 1. 移植tslib(触摸屏校正) 2. Qt/E-4.5.3ARM移植 3. Qtopia-4.2.4手机平台在ARM移植 第二十三讲 Qt应用程序的开发 1. Qt编程

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧