我也来祝贺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库的移植已成功。

后面我还需要做大量的裁剪工作,希望和有共同喜好的大侠学习!~
...全文
5305 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)

16,212

社区成员

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

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