当前位置:编程学习 > wap >>

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

为了祝贺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库的移植已成功。

后面我还需要做大量的裁剪工作,希望和有共同喜好的大侠学习!~ --------------------编程问答-------------------- 顶一下,非常不错。 --------------------编程问答-------------------- up --------------------编程问答-------------------- 赞,顶楼主 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- mark下  --------------------编程问答-------------------- henbucuo --------------------编程问答-------------------- --------------------编程问答--------------------     学习中 哈哈 --------------------编程问答-------------------- UP 正准备开始用 --------------------编程问答-------------------- 顶下下 --------------------编程问答-------------------- 顶,非常不错 --------------------编程问答-------------------- 顶一下,不错. --------------------编程问答-------------------- en hao! --------------------编程问答-------------------- up --------------------编程问答-------------------- 上图啊 --------------------编程问答-------------------- up~ --------------------编程问答-------------------- 为了祝贺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  --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 1 看来用QT的人越来越多了 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 使用QT是为了跨平台还是方便?
还是 MiniGUI 太贵了? --------------------编程问答-------------------- 赞一个! --------------------编程问答-------------------- mark 学习 --------------------编程问答-------------------- 学习学习
--------------------编程问答-------------------- 顶一下,非常不错。 --------------------编程问答-------------------- QT是个好东西,嵌入式必备~~ --------------------编程问答-------------------- 赞个 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- MARK --------------------编程问答-------------------- 兴奋!!开版了!!能不能火呢 --------------------编程问答-------------------- dddddddddd. --------------------编程问答-------------------- QT这个东西不好说。 --------------------编程问答-------------------- qt 好學,只是compile太慢 --------------------编程问答-------------------- QT 哈哈 老师也要我用这个  --------------------编程问答-------------------- xue xi学历学习了 谢谢 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 楼主太好了 --------------------编程问答-------------------- 我用的是4.3.2 4.2.2都移过了,release版的都有问题 --------------------编程问答-------------------- 不错的文章。。等以后移植的时候很用得着啊~~~谢谢楼主!辛苦。。 --------------------编程问答-------------------- 好贴 顶呀~~~ --------------------编程问答-------------------- mark --------------------编程问答-------------------- 顶一下 --------------------编程问答-------------------- up --------------------编程问答-------------------- up --------------------编程问答-------------------- 做个记号 --------------------编程问答--------------------
引用楼主 chenfeng2002 的回复:
为了祝贺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目录名,否则无法编译通过,提示的错误信息不确定。


楼主,解压后的目录是可以重命名的,比如 把你解压的这个命名为 qt-embedded-linux-opensource-src-4.5.3-arm 或者 qt-embedded-linux-opensource-src-4.5.3-x86 这个目录名字并不影响后面的编译

--------------------编程问答-------------------- 绝对顶 --------------------编程问答-------------------- 太经典了! --------------------编程问答-------------------- UP
--------------------编程问答--------------------    顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 --------------------编程问答-------------------- 顶!
我用过博创的ARM2410S也移植过Qtopia
只不过 我的总结看起来来也点乱
不然也分享给大家~~~ --------------------编程问答-------------------- qt for wince环境搭建老是出错 郁闷啊。。 --------------------编程问答-------------------- 赞一个!11111111111111111111 --------------------编程问答-------------------- 谢谢楼主~~~~~~~~~~~~~~~~~~~·· --------------------编程问答-------------------- 顶下 --------------------编程问答-------------------- 能不能移植到iPhone上面啊,希望那个牛人移植到iphone上面,google有上有一个已经移植了,但是没有把界面移植,这样意义不大 --------------------编程问答--------------------  刚来先学习着  顶下   谢谢楼主   --------------------编程问答-------------------- 楼主这样移植程序,有Qtopia那样点击的效果吗,还是只能用鼠标去点击。 --------------------编程问答--------------------
引用 58 楼 strong46066999 的回复:
楼主这样移植程序,有Qtopia那样点击的效果吗,还是只能用鼠标去点击。

up --------------------编程问答-------------------- lz很热心,收藏了,学习 --------------------编程问答-------------------- 解释的太详细了! --------------------编程问答-------------------- 楼主 有qt4.6在嵌入式arm的在移植吗 发下 谢谢 --------------------编程问答-------------------- 刚开始学习QT  头大 --------------------编程问答-------------------- 顶下 ~~~~ --------------------编程问答-------------------- 很好,收藏了. --------------------编程问答-------------------- 顶一下,哈哈,我也是最近移植QT4.5.0成功了,哈哈,不过现在遇到的问题就是移植后,在开发板上运行程序,显示不了中文,不知道楼主有没有遇到这个问题,欢迎交流,我也在论坛上发了贴,如果楼主能解决,请不吝赐教,哈哈 --------------------编程问答--------------------
引用 62 楼 hhfssg 的回复:
楼主 有qt4.6在嵌入式arm的在移植吗 发下 谢谢


LZ说得很详细,4.6和4.5一样的啊,
我没有裁剪,直接在qt源码目录下gmake编译过了,
在开发板上也可以运行例子程序 --------------------编程问答-------------------- 不错!!!!! --------------------编程问答-------------------- 谢谢分享了 --------------------编程问答-------------------- 非常的好啊,谢谢. --------------------编程问答-------------------- 谢谢楼主的分享 --------------------编程问答-------------------- 顶。。。。 --------------------编程问答--------------------
LZ把事情搞复杂了,所谓的进入目录单独编译的问题是不存在的,直接configure就行了 --------------------编程问答-------------------- 先恭喜了,希望lz帮个忙,arm-linux-gcc 4.3.2 中的libgcc_s.so.1库发给我,非常谢谢 --------------------编程问答-------------------- 发给我 我也就要成功了
--------------------编程问答-------------------- 邮箱ppcst@qq.com --------------------编程问答-------------------- 恭喜楼主! --------------------编程问答-------------------- good! --------------------编程问答-------------------- /mnt/yaffs]./scooters -qws                                                     
QSqlDatabase: QSQLITE driver not loaded                                         
QSqlDatabase: available drivers:    

请教LZ遇到这个问题的原因和解决方法? --------------------编程问答-------------------- --------------------编程问答-------------------- 恭喜,加油 --------------------编程问答-------------------- QT 哈哈 老师也要我用这个  --------------------编程问答-------------------- 好贴! --------------------编程问答-------------------- 多点这类的文章! --------------------编程问答-------------------- 顶~~~~~~~~~~~~~~~~~~~~~~~~ --------------------编程问答-------------------- qt编译好复杂啊.............. --------------------编程问答-------------------- 来了就是客,学习一下经验。 --------------------编程问答-------------------- --------------------编程问答-------------------- 很好啊,学习一下 --------------------编程问答-------------------- 有个问题
configure配置时应该是-nomake demos,而不是-nomake demo,否则configure过程会有问题
貌似是找不到libss
这是sed的字符串处理造成的本来是*libs demos*,删掉' demo'后就变成了libss,这样就没有意义了
这样的话直接make会出错的,因为很多makefile都没有升成。 --------------------编程问答-------------------- 运行Qt4程序后怎样退回arm开发板上Qt2的主界面呢?
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,