免费注册 查看新帖 |

Chinaunix

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

Qt、qte、qtopia编译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-20 12:45 |只看该作者 |倒序浏览

                现在有很多人在做ARM开发的时候都会遇到这个问题,然而在编译这三者的时候就算按照官方文档来一步步进行也不一定成功,问题的根源在哪呢?
现在大家能得到的tar包肯定都是没有问题的,那么关键就在于编译环境了,不知道大家现在都用什么系统来做开发了,由于很多这种都是在RedHat 9下做的,其实这个不重要,重要的是库的问题,所以在开始编译前大家最好看一下gcc的版本(gcc -v)。其实各个版本的系统都会保证兼容性而保留一个比较老的编译器及相应的库,比如RedHat 9有gcc(3.2)和gcc296这两个版本,FC4就有gcc(4.0.0)和gcc32(3.2),有时候用版本高的编译器的时候就会出现问题,这里的问题有两个方面一是编译器的工作方式有区别了,比如对语法都更严格了;另一个方面是他说链接的库的版本变了,也会出现问题。这样大家可以在Makefile的编译选项中加入-v这样就可以在编译的时候看看到底包含了哪些头文件调用了哪些库了。然后在根据具体的错误找到源头去分析解决。下面是我在FC4下编译这些环境时的方法(参考官方文档,然后按照自己的环境修改):
 
fc4下成功编译qt-x11-2.3.2 qt-embedded-2.3.10 qtopia-2.1.1 tmake-1.131.设置环境变量:TMAKEDIR=/home/arm/tmake-1.13QT2DIR=/home/arm/qt-x11-2.3.2QTEDIR=/home/arm/qt-embedded-2.3.10QPEDIR=/home/arm/qtopia-2.1.1QT3DIR=/usr/lib/qt-3.3QTDIR=$QTEDIRDQTDIR=$QT3DIR
TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++QMAKESPEC=linux-g++PATH=$QT2DIR/bin:$QTEDIR/bin:$QPEDIR/bin:$DQTDIR/bin:$QT3DIR/bin:$QTDIR/bin:$TMAKEDIR/bin:$PATHLD_LIBRARY_PATH=$QT2DIR/lib:$QTEDIR/lib:$QPEDIR/lib:$DQTDIR/lib:$QT3DIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export TROLLTECHDIR TMAKEDIE QT2DIR QTEDIR QPEDIR QT3DIR QTDIR DQTDIR TMAKEPATH QMAKESPEC PATH LD_LIBRARY_PATH
2.编译qt/embeddedcd $QTEDIRexport TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -no-xft -qvfb -depths 4,8,16,32make
3.编译qt-x11-2.3.2cd $QT2DIRexport QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -debug -no-opengl -no-xftmake sub-srccd tools/designer/utilmakecd ../uicmakecp $QTDIR/bin/uic $QTEDIR/bin
4.编译qvfb//这里应该指定TMAKEPATHcd $QTEDIR/tools/qvfbtmake qvfb.pro > Makefilemakecp qvfb $QTEDIR/bin
5.编译qtopiacd $QPEDIRexport QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -debug -edition phone -qtopiadesktop -displaysize 176x208make
主意编译过程中不能用fc4自带的gcc4.0.0编译要用gcc3.2.3来编译,所以要将配置文件中的g++全部替换为g++32,gcc全部替换为gcc32,主要替换的有这几个地方 $QTEDIR/configs/linux-generic-g++-share  $QTEDIR/configs/linux-generic-g++-share-debug$TMAKEDIR/lib/qws/linux-generic-g++/tmake.conf$QPEDIR/mkspecs/qws/linux-generic-g++/qmake.conf还有可能以上目录中的linux-x86-g++里的配置文件替换编译参数就可以了
在编译qvfb的时候有可能遇到ld找不到库的问题改前LIBS=$(SUBLIBS) -L$(QTDIR)/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm 改后LIBS=$(SUBLIBS) -L$(QTDIR)/lib -L/usr/X11R6/lib -L$(QTEDIR)/lib -lqt -lXext -lX11 -lm -lqte只要添加$QTEDIR/lib库就可以了在后面参数中添加-lqte就可以了,这样编译文件没问题
按这样的步骤执行可能不能生成frame buffer后我改用静态连接的办法实现了该功能1.编译qt-2.3.2cd $QT2DIRexport TMAKEPATH=$TMAKEDIR/lib/linux-g++export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -static -no-xft -no-opengl -no-smmakemkdir $QTEDIR/bincp bin/uic $QTEDIR/bin/2.编译qvfbexport TMAKEPATH=$TMAKEDIR/lib/linux-g++export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHcd $QTEDIR/tools/qvfbtmake -o Makefile qvfb.promakemv qvfb $QTEDIR/bin/3.编译qt/embeddedcd $QTEDIRcp $QPEDIR/src/qt/qconfig-qpe.h $QTEDIR/src/toolsexport TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -debug -qconfig qpe -qvfb -depths 4,8,16,32 -keypad-mode -system-jpeg -gifmake sub-src
编译qtopia的过程与第一种方法完全一样,这里最重要的就是环境的设置问题了,很多情况下就是因为环境设置不正确的问题而导致编译出错或者是编译成功而运行的时候出错,这些问题都要仔细研究一下她的内部结构才可以解决,不要只是找到网上的一些资料然后就完全按她的去做,这样成功的可能性不会很大,这些东西还是要靠自己一步步去摸索.由于qtopia没有提供启动脚本所以用下面的启动脚本来启动qtopia界面#!/bin/shsource /home/arm/pcdev
export QTDIR=/home/arm/qtopia-2.1.1/image/opt/Qtopiaexport QPEDIR=/home/arm/qtopia-2.1.1/image/opt/Qtopiaexport LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATHexport PATH=$QPEDIR/bin:$PATH
findproc() {        /bin/ps -e | /bin/sed -n -e '/\/ s/^ *\([0-9][0-9]*\).*/\1/p'}
killproc() {        pid=`findproc $1`        [ "$pid" != "" ] && kill $pid}
killall quicklauncherkillall qpekillall qvfb[ -x /sbin/fuser ] && ( /sbin/fuser -kn tcp 4242 || /sbin/fuser -kn tcp 4243 )[ -x /bin/fuser ] && ( /bin/fuser -kn tcp 4242 || /bin/fuser -kn tcp 4243 )
echo "Stopping common sound deamons..."artsd_pid=`findproc artsd`[ "$artsd_pid" != "" ] && kill $artsd_pidesd_pid=`findproc esd`[ "$esd_pid" != "" ] && kill $esd_pid
echo "Starting qvfb..."qvfb -width 160 -height 280 &
sleep 3s
echo "Starting Qtopia 2.1.1..."HOME=/home/arm/qtopia-2.1.1/image/opt/Qtopia/demohome qpe
echo "Restarting killed sound deamons..."[ "$artsd_pid" != "" ] && artsd &[ "$esd_pid" != "" ] && esd &其中pcdev是我开始安装时的环境设置脚本#!/bin/bash
设置TMAKEDIR、QT2DIR、QTEDIR、QPEDIR、QT3DIR、TMAKEPATH、QMAKESPEC、PATH和LD_LIBRARY_PATH这几个变量就可以了
其实这里的设置太烦了,太多了也有可能第一次的时候问题就出在这里,其实这里的环境设置只要有三个就可以了QT2DIR,TMAKEIR,QTEDIR就可以了,在编译的时候一个很关键的问题是TMAKEPATH的问题,这个路径在编译不同的软件的时候是不一样的第一次就没有注意到这个问题,应该是第一次编译qvfb 的时候没有设置TMAKEPATH,这里的TMAKEKPATH应该是$TMAKEDIR/lib/linux-g++
 
 
 
               
               
               

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP