Qt/Embedded的安装配置使用
江苏商贸职业学院226011 殷松瑜
摘要嵌入式开发大都选择开源的Linux作为开发平台,开源软件虽然功能很强,但配置安
装需要精通计算机很多专业知识。在Linux中大多数软件提供的是源代码,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,软件才能使用。有效的利用make和makefile工具可以大大提高项目开发的效率。
关键字Qt,Embedded,Makefile
在嵌入式开发的过程中要把Qt程序移植到嵌入式开发平台,在安装Qt的过程中碰到了不少问题,也学到了一些经验教训,想和大家一起开研究探讨。
笔者的实验环境,硬件:UP-CUP6410-II型网关部分嵌入式实验平台,软件:Vmware Workstation+Fedora Core8+MiniCom/Xshell+ARM-LINUX交叉编译开发环境,QT软件包:qt-embedded-linux-opensource-src-4.4.0.tar.bz2,tslib-l.4.tar.bz2。
Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。Qt是挪威Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE就是Qt的嵌入式版本。QtE虽然公开代码和技术文档,但是它不是免费的,当开发者的商业化产品需要用到他的运行库时,必须向Trolltech公司支持license费用(每套3美金),如果开发的东西不用于商业用途则不需要付费。QtE由于平台无关性和提供了很好的图形用户界面编程接口,在许多嵌入式系统中得到了广泛的应用,是一个成功的嵌入式GUI产品。
下面就是配置编译QT/Embedded环境的过程:
1、将QtE压缩包(/UP-CUP6410/SRC/gui/目录下)拷贝到新建立的目录下并解压
[root@localhost for_arm] # tar xjvf
/UP-CUP6410/SRC/gui/qt-embedded-linux-opensource-src-4.4.0.tar.bz2 -C
/home/uptech/QT4/for_arm/
这样在实验目录的for_arm下产生解压后的qt-embedded-linux-opensource-src-4.4.0目录。所有QT/Embedded环境源码都存放在此。
2、进入qt-embedded-linux-opensource-src-4.4.0目录执行configure文件,配置QtE环境[root@localhost for_arm ] #cd qt-embedded-linux-opensource-src-4.4.0/
[root@localhost qt-embedded-linux-opensource -src-4.4.0]#./configure -embedded
arm -xplatform qws/linux-arm-g++ -depths 8,16 -fast -qt-mouse-linuxtp -qt-mouse-tslib -I$PWD/../tslibl.4-install/include -L$PWD/../tslibl.4-installllib
-prefix /usr/local/Trolltech/Qt- embedded-4.4.0
其中-embedded arm参数指定支持ARM系列CPU平台,如果不加说明默认支持X86系列CPU平台,-xplatform qws/linux-arm-g++参数指定跨平台编译器的安装路径,-prefix参数指定QtE环境的安装路径;-qt-mouse-tslib参数指定了该QT/Embedded环境支持触摸屏设备;$PWD 表示当前目录,-I与-L参数指定了触摸屏设备的头文件以及库文件路径,当然,两个参数的指定要与实际编译tslib库时候安装路径为准。-depths 8,16参数指定支持8,16位的显示颜色深度。-fast参数指定快速编译安装QT/Embedded环境。
./configure配置选项过长,使用该命令时候请仔细检查不要写错。Configure的其他具体配置用户可以通过-help命令查看:
[root@localhost qt-embedded-linux-opensource-src-4.4.0]#./configure --help
在输出的许可证提示符下输入“yes”同意回车即可进入QT/Embedded库的配置过程,注意yes大小写及全称。
3、编译QtE库
[ root@localhost qt-embedded-linux-opensource-src-4.4.0]#make
由于QT库环境的庞大体积,编译QT/Embedded库环境时间比较长,具体时间因机器配置而异(大约2个小时左右)。
4、安装QtE库
[ root@localhost qt-embedded-linux-opensource-src-4.4.0]#make install
此时便会在/usr/local/目录下产生Trolltech/ Qt-embedded-4.4.0目录。
至此QtE安装结束
笔者在安装的过程中把参数-prefix /usr/local/Trolltech/Qt-embedded-4.4.0中的Trolltech错写成trolltech,仅仅相差一个大小写字母,后来为了Qt X11与QT/E环境一致,把/usr/local/trolltech/Qt-embedded-4.4.0又改写成/usr/local/Trolltech/Qt-embedded-4.4.0,但是后面出现了一系列编译运行问题。
编译运行一个QT/E程序testmyqt-x11为例,过程如下:
[root@localhost testmyqt-x11]# /usr/local/Trolltech/Qt-embedded-4.4.0/bin/qmake -project
此命令结果在当前目录下生成项目文件testmyqt-x11.pro。
[root@localhost testmyqt-x11]# /usr/local/Trolltech/Qt-embedded-4.4.0/bin/qmake QMAKESPEC has not been set, so configuration cannot be deduced.
Error processing project file: /home/uptech/testmyqt-x11/testmyqt-x11.pro
此命令是在当前目录下生成编译配置文件Makefile。
[root@localhost testmyqt-x11]# /usr/local/Trolltech/Qt-embedded-4.4.0/bin/qmake -spec /usr/local/Trolltech/Qt-embedded-4.4.0/mkspecs/qws/linux-arm-g++
但是由于安装路径有错找不到QMAKESPEC,只好手工添加QMAKESPEC路径,总算成功。然后用make命令编译程序又出错。
[root@localhost testmyqt-x11]# make
/usr/local/trolltech/Qt-embedded-4.4.0/bin/uic testx11.ui -o ui_testx11.h
make: /usr/local/trolltech/Qt-embedded-4.4.0/bin/uic:命令未找到
从提示说明可以看出是路径/usr/local/trolltech/出现问题。
怎么解决呢,后来就直接打开目录下的配置文件Makefile进行修改,把所有相关路径/usr/local/trolltech/ Qt-embedded-4.4.0全部改成/usr/local/Trolltech/ Qt-embedded-4.4.0,保存后再编译,又发生找不到库文件的错误。
warning: libts-0.0.so.0, needed by /usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so, not found (try using -rpath or -rpath-link)
/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so: undefined reference to `ts_read_raw'
/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so: undefined reference to `ts_open'
/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so: undefined reference to `ts_fd'
/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so: undefined reference to `ts_config'
/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so: undefined reference to `ts_close'
/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libQtGui.so: undefined reference to `ts_read'
collect2: ld returned 1 exit status
make: *** [testmyqt-x11] 错误1
其实还是路径/usr/local/trolltech/有问题,连接程序找不到相关链接库文件/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libts-0.0.so.0。
最后直接打开目录下的配置文件Makefile进行修改,找到参数项LFLAGS 直接添加LFLAGS=/usr/local/Trolltech/Qt-embedded-4.4.0/lib/libts-0.0.so.0,
保存退出再次编译后成功,并成功移植到ARM平台。
[root@localhost testmyqt-x11]# make
arm-linux-g++ /usr/local/Trolltech/Qt-embedded-4.4.0/lib/libts-0.0.so.0 -o testmyqt-x11 main.o myqt.o moc_myqt.o -L/home/uptech/QT4/for_arm/tslib1.4-install/lib
-L/usr/local/Trolltech/Qt-embedded-4.4.0/lib -lQtGui -lQtNetwork -lQtCore -lpthread
参看目标文件相关属性,就是可以移植到ARM平台的可执行文件。
[root@localhost testmyqt-x11]# file testmyqt-x11
testmyqt-x11: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped
嵌入式开发大都选择开源的Linux作为开发平台,在Linux中大多数软件提供的是源代码,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,软件才能使用。有效的利用make和makefile工具可以大大提高项目开发的效率,同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。
参考书目
[1]UP-CUP6410-II型物联网嵌入式综合实验平台实验指导书(网关部分) [M],北京:北京博创科技有限公司,2011
[2]徐成著,嵌入式Linux系统实训教程[M],北京:人民邮电出版社,2010
[3]常华著,嵌入式系统原理与应用[M],北京:清华大学出版社,2013