QT 2009-04-22 17:06:20 阅读266 评论 字号:大中小 订阅
1 Qt 和 Qtopia 简介 (自己的理解,不对之处还请见谅)
Qt特点是“一次编写,处处编译”。
Qt是在PC机上安装安装使用的;Qtopia Core 是基于嵌入式Linux的面向单一应用的嵌入式产品开发平台,即要移植到开发板上使用的;Qt/E是面向嵌入式系统的Qt版本,而Qtopia最初是构建于Qt/E之上的类似桌面系统的应用程序。
最初Qtopia和Qt/E是两种不同的程序,但从版本4.1以后,将Qt/E并入了Qtopia,改称为Qtopia Core。
接下来要进行的Qt移植就是指对Qtopia Core的移植,我们的版本是Qtopia4.2.2,即对其库的移植。移植的步骤是这样的,首先在PC机上安装Qtopia4.2.2,然后把其中的库放入我们制作的根文件系统的/lib之中,最后设置环境变量。以下为详细内容:
2 下载Qtopia Core 4的源代码,建议到
www.qtopia.org.cn下载, qtopia-core-opensource-src-4.2.2.tar.gz,解压
# tar zxvf qtopia-core-opensource-src-4.2.2.tar.gz
# cd qtopia-core-opensource-src-4.2.2
# ./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 4,8,12,16 -no-qt3support
# gmake (这个过程最漫长...)
# gmake install (需root 权限)
设置Qt的环境变量,修改$HOME/.bash_profile 加入
# vi $HOME/.bash_profile
添加
PATH=/usr/local/Trolltech/QtopiaCore-4.2.2-arm/bin:/usr/local/Trolltech/Qt-4.2.2/bin:$PATH
后面的是Qt for X11的环境变量设置,执行使立即生效
# source $HOME/.bash_profile
# echo $PATH
# which qmake //可查看已经添加成功
3 把qtopia-core-opensource-src-4.2.2的库放入制作的根文件系统的/lib之中
安装好的Qtopia在目录/usr/local/Trolltech/QtopiaCore-4.2.2-arm下,进入其目录。可以看到/lib文件,其中包括一个fonts文件夹,里面是一些字体,内容很多也很占空间(72M左右),因为我们的目标板一般flash很小,64M左右,所以我们只选用很常用或者自己觉得好看的字体放入。
首先在/建立一个文件夹——Qtopia,里面存放入库和字体文件的fonts文件夹,
# cd /usr/local/Trolltech/QtopiaCore-4.2.2-arm
# mkdir Qtopia
然后把/lib下的文件复制到其中
# cp –arf /usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/* /usr/local/Trolltech/QtopiaCore-4.2.2-arm/Qtopia
删掉多余的字体文件
# cd /usr/local/Trolltech/QtopiaCore-4.2.2-arm/Qtopia/fonts
只留下cour.pfa 和 cursor.pfa
最后把Qtopia拷贝到刚刚我们做好的文件系统的/lib下面
# cp –arf /usr/local/Trolltech/QtopiaCore-4.2.2-arm/Qtopia /rootfs/lib
4 设置环境变量
在文件系统中,关键要设置环境变量,才能让Qt4的程序找到我们移植的Qt4的库,真正跑起来。设置环境变量可分两种,与PC机上一样,可以在命令行下设置,还有一种方法是在/etc/profile文件中设置,让开发板一启动就自动设置,添加命令如下:
PATH=/usr/bin:/usr/sbin:$PATH:./
export BUFFER='/dev/fb/0'
export TSDATAFILE='/mnt/yaffs/minigui/tsdata.dat'
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/lib/Qtopia:$LD_LIBRARY_PATH
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
关键是LD_LIBRARY_PATH,这个设置让系统知道Qt的库的位置,即/usr/lib/Qtopia,还有一个关键是QWS_DISPLAY,因为我们在运行程序时,有一个参数是qws,例如:./analogclock –qws ,设置好QWS_DISPLAY后才能在显示屏上显示按我们要求比例大小的图像。
5 测试代码
进入/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1
# cd /usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1
# qmake -project
# qmake
# make
生成二进制文件t1,通过适合的方式拷贝到文件系统中,执行 ./t1 –qws 可以显示 helloworld
http://blog.csdn.net/mimimomo/archive/2008/05/14/2443593.aspx
出错……没道理需要这个库呀……libstdc++.so.6
[root@Qiu /mnt]# ./t1 -qws
./t1: error while loading shared libraries: libstdc++.so.6: cannot open shared object No such file or directory
如提示缺失libstdc++.so.6等库文件,可从/usr/local/arm/3.4.1/arm-linux/lib复制过来。
其他的库也是一样,我之前做lib的时候可能没做好。
最后一个问题就是刚才提到的字体问题。网上的教程都是说将fontdir放到$QTDIR/lib/fonts目录下即可。但我编译的这个版本总不行,提 示 Cannot find font definition file /usr/local/Trolltech/QtopiaCore?
我直接创建了这个路径。