免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 731 | 回复: 0
打印 上一主题 下一主题

QT安装日志【讲的很全的一篇】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-16 19:21 |只看该作者 |倒序浏览

颜色注释说明:蓝色是转载文章中自己实验时出错后,解决的环节,或者是自己认为重要的环节,红色是自己添加的一些注解
1. 简介
QT是目前在linux上使用较广的一个图形系统。用户经常配合KDE桌面环境来使用。需要注意的是我们看到的并操作的是KDE,而不是QT。QT只是一套库函数(类库),KDE才是可执行程序.同时KDE为了其他程序方便的对其操作,也提供一套库函数(类库)。
在PC机上的QT是基于X11图形系统的,在嵌入设备中往往不需要这么累赘,只需使用QTE(QT Embedded)即可包括PC平台中X11和QT库的功能。
另一方面,嵌入设备受许多条件的限制,桌面系统也不能直接使用PC机上已有的系统。QTOPIA就是相当于KDE的桌面系统.根据具体嵌入设备的需要可以配置成phone和pocket pc两种。
2. 准备工作
2.1 目标
首先要明确将要干的是什么,将怎么做。
我们的目标很明确——就是在自己的开发板上使用基于QTE的桌面系统QTOPIA。
我们的工作往往是先在PC完成以后移植到ARM平台上;先编译好QTE的库,再编译QTOPIA。因为这个系统和具体的设备有关(例如:触摸屏、时钟、电源管理设备等),所以最后还需要做设备接口的移植工作。
2.2 软件包
系统平台:RedHat 9(完全安装 看见过很多次还没有真正的知道过这个细节哦
qt-embedded-2.3.7.tar.gz (qte的库)
qt-x11-2.3.2.tar.gz (为了生成相应的qtdesigner和qvfb、moc(元对象编译器)和uic(用户界面编译器))
(生成相应的工具后可以将工具拷贝到qte的bin中然后qt-x11就可以引退了,呵呵rm -rf qt-x11)
qtopia-free-1.7.0.tar.gz (qte的桌面环境程序)(最后编译)
tmake-1.11.tar.gz (编译时会用到,用于生成嵌入式环境的Makefile
e2fsprogs-1.35.tar.gz (只使用其中的uuid的库)
Jpegsrc.v6b.tar.gz(要用到其中的libjpeg.so.62)
当下载完这些包以后我们先建立一个工作环境。假设所有软件包都下载在用户目录下,我下载在/root/install下。
2.3 环境的建立
# cd ~
# mkdir x86-qt
# tar zxvf qt-x11-2.3.2.tar.gz
# mv qt-2.3.2 qt-x11
# cd x86-qtopia
# tar zxvf ../tmake-1.11.tar.gz
# tar zxvf ../qt-embedded-2.3.7.tar.gz
# tar zxvf ../qtopia-free-1.7.0.tar.gz
# tar zxvf ../e2fsprogs-1.35.tar.gz
# mv tmake-1.11 tmake
# mv qt-2.3.7/ qt
# mv qtopia-free-1.7.0 qtopia
# mv e2fsprogs-1.35 e2fsprogs
# cp x86-qt arm-qt -rf
记住,用户目录下的x86-qt目录是PC机上编译的工作环境,arm-qt是arm平台的交叉编译工作环境,qt-x11是两者公用的。
接下来还必须编译qt-x11,主要是为了编译生成其中的qtdesigner和qvfb。qvfb程序在系统中并未安装,需要我们自己编译。 qtdesigner是和qt库的版本是相关的,当我们使用PC机上和QTE版本不符的qtdesigner时,可能在PC机上的qt-x11能使用的控 件在QTE上并未实现,导致应用程序编译不成功。所以,我们使用2.3版本的QTE时,必须使用相同版本的qt-x11编译生成的qtdesigner和 qvfb。
# cd ~/qt-x11
# export QTDIR=$PWD
# echo yes | ./configure -no-xft

# make -C src/moc
# cp src/moc/moc bin
# make -C src
# make -C tools/designer
# make -C tools/qvfb
# cp tools/qvfb/qvfb bin
# strip bin/uic bin/moc bin/designer bin/qvfb
#cp qt-x11/bin/* /root/x86-qt/qt/bin -f
3. PC平台编译
编译之前做一下准备工作:打开一个控制台之后设置环境变量。
# cd ~/x86-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
# export PATH=$QTDIR/bin

QPEDIR/bin

TMAKEDIR/bin

PATH
3.1 编译QTE
# cd $QTDIR
# cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f
# (echo yes ; echo no) | ./configure -platform linux-x86-g++ -qconfig qpe -depths 16,24,32
(这个配置选项的内容很多,可以自己参见configure -help来设置,同时需要多了解自己需要的编译配置选项特殊性来进行配置了)
# make -C src clean
# make -C src
看一下$QTDIR目录下是否已经有了qt的库了?
3.2 编译QTOPIA
# cd $QPEDIR/src
# ./configure
# make clean
# make
3.3 测试QTOPIA
激动的时刻来了,如果这个步骤成功将意味着可以做应用开发了。
# cd ~/x86-qtopia
# mkdir dist
# cd dist
# cp -af ../qt/lib/ .
# cp -af ../qtopia/apps .
# cp -af ../qtopia/bin .
# cp -af ../qtopia/plugins .
# cp -af ../qtopia/i18n .
# cp -af ../qtopia/pics .
因为Security.png有点错误,所以必须进行一下操作:
# cd pics
# pngtopnm Security.png>a.pnm
# pnmtopng a.pnm>Security.png
因为qpe运行的时候,当前目录必须是$QTDIR/bin,所以不能在$QTDIR目录下执行bin/qpe来运行。
# export QTDIR=~/x86-qtopia/qt
# cd $QTDIR/bin
# ./qvfb &
# ./qpe &
看到qpe在qvfb中的界面了吗?我看到了~!
4. 目标平台交叉编译
与PC机上的编译一样,打开一个控制台之后需要设置环境变量。
# cd ~/arm-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
# export PATH=$QTDIR/bin

QPEDIR/bin

TMAKEDIR/bin

PATH
4.1 交叉编译QT
(这里切记把交叉编译链cross-2.95.3必须放在/usr/local/arm下-----名字、路径不能变其他的)
# cd /root/arm-qt/qt
#cp /root/install/qconfig-local.h ./tools
# ./configure –xplatform linux-arm-g++ -shared –debug –qconfig local –qvfb –depths 16,24,32
# make clean
# make
4.2 交叉编译QTOPIA
编译e2fsprogs-1.35.tar.gz
#cd e2fsprogs
#./configure –host=arm-linux(linux-x86'x86平台的配置,可能需要')
–with-cc=arm-linux-gcc –with-linker=arm-linux-ld –enable-elf-shlibs –prefix=/usr/local/arm/2.95.3/arm-linux
(配置选项指示了需要生成的库的对应平台信息,必须要正确配置后才能生成可用的特定平台的库)
#make
#make install lib/uuid
将e2fsprogs-1.3.5/lib目录下的uuid文件夹复制到/root/arm-qt/qtopia/include下
将e2fsprogs-1.3.5/lib下的libuuid.a libuuid.so libuuid.so.1 libuuid.so.1.2复制到/root/arm-qt/qtopia/lib和/usr/local/arm/2.95.3/arm-linux/lib下
[#cp /root/arm-qt/e2fsprogs/lib/libuuid.so.1.2 /usr/local/arm/2.95.3/lib下(libuuidso.1.2版本不对的问题)可能不需要,出现问题再加这句](照做坐下来,出现的问题果然解决了,编译出的库文件既要放在编译器lib下,也要放在qtopia环境的include目录和lib目录中,相应文件有对应的关系了。至于是不是必须这样还不清楚,不过这样很保险的)。
编译jpegsrc.v6b.tar.gz
#tar zxvf /root/install/jpegsrc.v6b.tar.gz
#cd jpeg-6b
#./configure --enable-shared
#make (得到libtools程序)
#./configure --enabe-shared
修改Makefile
prefix=/root/arm-qt/qt(qte的路径,是QTE不是qtopia的路径哦
)
cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc
AR=/usr/local/arm/2.95.3/bin/arm-linux-ar rc
AR2=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
#cp jconfig.doc jconfig.h(需要自己斟酌的地方啦
#mkdir –p /root/arm-qt/qt/man/man1(暂时照做,还没知道其所以然)

#make
#make install
生成的libjpeg.so在/usr/lib下 将libjpeg.so拷贝到/usr/local/arm/2.95.3/arm-linux/lib下(照做坐下来,问题解决了
编译qtopia
# cd /root/arm-qt/qtopia/src
# ./configure –platform linux-arm-g++
# make
安装过程中碰到问题解决方法:(错误的解决办法很全很有效,在此对作者致谢了
1、 编译qte时 cross-2.95.3必须放在/usr/local/arm下,名字 路径都不能改
2、 找不到uuid的问题
编译e2fsprogs-1.35.tar.gz
#tar zxvf e2fsprogs-1.35.tar.gz
#cd e2fsprogs
#./configure –host=arm-linux –with-cc=arm-linux-gcc –with-linker=arm-linux-ld –enabe-elf-shlibs –prefix=/usr/local/arm/2.95.3/arm-linux
#make
#make install lib/uuid
将e2fsprogs-1.3.5/lib目录下的uuid文件夹复制到/root/arm-qt/qtopia/include下
3、找不到 –luuid的问题
把e2fsprogs-1.35/lib/uuid/libuuid.a 文件拷贝到 usr/lib 或者 qtopia/lib
#cd e2fsprogs
#cp -r lib/uuid ../qtopia/include
#./configure --enable-elf-shlibs
#make
#cp -r lib/libuuid.so* ../qt/lib
#cd ..
4、cannot find –lqtopia
将e2fsprogs-1.3.5/lib下的libuuid.a libuuid.so libuuid.so.1 libuuid.so.1.2复制到/root/arm-qt/qtopia/lib下
5、lib/libuuid.so.1:couldnot read symbols
将e2fsprogs-1.3.5/lib下的libuuid.a libuuid.so libuuid.so.1 libuuid.so.1.2复制到/usr/local/arm/2.95.3/arm-linux/lib
6、/usr/local/arm/2.95.3/arm-linux/bin/ld:cannot find –ljpeg
编译jpegsrc.v6b.tar.gz
#tar zxvf /root/install/jpegsrc.v6b.tar.gz
#cd jpeg-6b
#./configure --enable-shared
#make (得到libtools程序)
#./configure --enabe-shared
修改Makefile
prefix=/root/arm-qt/qt(qte的路径)
cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc
AR=/usr/local/arm/2.95.3/bin/arm-linux-ar rc
AR2=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
#cp jconfig.doc jconfig.h
#mkdir –p /root/arm-qt/qt/man/man1
#make
#make install
生成的libjpeg.so在/usr/lib下 将libjpeg.so拷贝到/usr/local/arm/2.95.3/arm-linux/lib下。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/67414/showart_1901830.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP