首页| 论坛| 消息

标题:Qt/E自带程序的编译
作者:keisuo
日期:2007-06-05 13:48
内容:

    今天尝试着对Qt/E自带的程序进行编译,获得了很多新的理解:
1.编译方法:
    在tutorial目录下有14个例子,进入t1-t8种的任意一个目录,发现有原程序和工程文件.pro,以及没有内容的Makefile文件。
    tmake -o Makefile t1.pro
    修改Makefile中的LINK = gcc 为 LINK = g++
    make
    这样就生成了可执行文件t1。
    ./t1 -qws
    则结果会显示在qvfb中

    注:在tmake之前要设置环境变量
   
  export TMAKEDIR=$PWD/tmake
  export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
  export PATH = $TMAKEDIR/bin:$PATH
2. 有些程序可能无法运行,由于缺少库文件。
  所以要进行下面的环境变量的设置才能执行,
  export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
3. 在tutorial中有些例子是无法编译的,因为我再编译Qt/E是configure中使用的选项是-qconfig -qpe,也就是qconfig-qpe.h,该文件中定义了一些宏。这个文件是用来配置Qt/E库文件的大小的。如果当初配置成-all的话则肯定各个例子都能顺利编译。
    所以今后要自己正对自己的程序用到的库,自己写一个配置文件qconfig-myconfig.h以实现Qt/E库文件的裁减。以节省Memory。
 
    请参考文档:
    1.《开贴整理QtEmbedded_Qtopia FAQ》
    2.《Qt Toolkit - The Feature Definition File》


#1 [keisuo 06-05 13:49]
QtEmbedded/Qtopia FAQ
Qt-X11/QtEmbedded/Qtopia及其他常见包的关系?
build Qtopia时经常能看到以下的包:
qt-x11-2.3.2
qt-x11-3.3.x
qte-2.3.x
qtopia-2.x
tmake-1.3
qmake, uic, moc
...
其中Qtopia编译依赖Qte;
qt-x11-2.3只与编译一些tool有关, 如uic,moc,qvfb..Qtopia并不依赖qt-x11;
qt -x11-3.3.x用来编译qtopia desktop(qtopia与桌面同步的工具)和i18n相关的lupdate、lrelease工具, 所以如果你configure qtopia的时候没有加-no-qtopiadesktop选项或者用到了-languages参数就得准备qt-x11-3.x了; 另外在phone版本中有一个modem模拟的工具叫做phonesim, 也依赖qt-x11-3.x编译,不过多数人是用不上的, 呵呵。
tmake用于生成Makefile文件, 用在qte应用上;
qmake包含在qtopia里, 用于为Qtopia应用生成Makefile文件;
uic, moc,qvfb,qmake,tmake和designer使用的时候要注意版本,2.x, 3.x, 4.x之间是不兼容的, 但相同主版本号之间是兼容的,所以我们在build Qtopia过程中经常从qt-x11-2.3中拷贝现成的uic和moc供qte使用。
编译过程中出现一些头文件找不到, 类未定义等等,很多时候是因为误使用了系统默认搜索路径下的uic等工具造成的。大家要注意这个问题
Qtopia/QtEmbedded版本对应关系?
Qtopia1.7.0 / Qte 2.3.7
Qtopia2.1.1 / Qte 2.3.10
Qtopia2.1.2 / Qte 2.3.11
Qtopia2.2.0 / Qte 2.3.12 (包含在qtopia2.2源码包中)
Qtopia/QtEmbedded相关源码包下载地址?
Qt/Qte:
ftp://ftp.trolltech.com/qt/source
ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qt/source
Qtopia(1.6-2.2):
ftp://ftp.trolltech.com/qtopia/source
ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qtopia/source
tmake:
ftp://ftp.trolltech.com/freebies/tmake
ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/freebies/tmake
我的QtEmbedded程序中的中文字符为什么显示成方块?
两个可能的原因:
一是qte的库未编译进对中文textcodec的支持, 解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏, 重新configure和make
二 是程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文), 需要在程序中指定一个中文字体, 如qte自带的unifont(这个字体大家普遍的看法是看上去像残废), qt4版本里新加入了文泉驿的unicode字体, 可以在源码包里找到,比较漂亮, 推 ..
#2 [keisuo 06-05 13:52]
Qt/E 与 Qtopia在redhat9.0下的安装
所需软件包:
tmake-1.11.tar.gz
qt-x11-2.3.2.tar.gz
qt-embedded-2.3.7.tar.gz
e2fsprogs-1.35.tar.gz
qtopia-free-1.7.0.tar.gz

安装:网上讲安装的文章也不少,依葫芦画瓢,有的能够安装成功,有的不行。最后我采用的是ST2410开发板中提供的一个批处理文件来安装的,由于采用的是Redhat9.0的操作系统,所以我做了一点点修改。具体内容如下:
#!/bin/bash
tar xfvz tmake-1.11.tar.gz
tar xfvz qt-embedded-2.3.7.tar.gz
tar xfvz qtopia-free-1.7.0.tar.gz
tar xfvz qt-x11-2.3.2.tar.gz
mv tmake-1.11 tmake
mv qt-2.3.7/ qt
mv qtopia-free-1.7.0 qtopia
mv qt-2.3.2 qt-x11
#install qt-x11
cd qt-x11
export QTDIR=$PWD
echo yes | ./configure -static -no-xft -no-opengl -no-sm
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
cd ..
cp qt-x11/bin/?* qt/bin
rm -fr qt-x11
#install qt-embedded
export QTDIR=$PWD/qt
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
cd qt
make clean
cp ../qtopia/src/qt/qconfig-qpe.h src/tools/
(echo yes; echo yes ) |./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32 make -C src
cd ..
#add by J.Q.Shen to prepare for uuid.h and libuuid.so
tar zxvf e2fsprogs-1.35.tar.gz
cd e2fsprogs-1.35
cp -r lib/uuid ../qtopia-free-1.7.0/include
./configure --enable-elf-shlibs
make
cp -r lib/libuuid.so* ../qt-2.3.7/lib
cd ..
#add by J.Q.Shen to prepare for uuid.h and libuuid.so
#install qtopia
cd qtopia/src
./configure -platform linux-generic-g++
make


这样的话在我的机器上试安装成功了。安装后打开了qvfb,在运行光盘中的qpe批处理文件,内容如下:
#!/bin/sh
export QTDIR=$PWD/qt
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
export ..
#3 [keisuo 06-05 13:53]
QTE触摸屏加载有两种方法:
(1)QTE本身触摸屏加载;
主要注意三个内容:
编译QTE时,在其自定义配置文件(位于QTDIR/src/tools/qconfig-XXX.h,其XXX为自定义的名字,该特征字可以在configure时用-qconfig XXX指定)所应加的内容:
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
去掉鼠标自动识别功能 :#define QT_NO_QWS_MOUSE_AUTO
去掉不用的鼠标驱动,(在实际中,这一步可以不要,但对于缩减QTE的大小很有帮助),方法主要是在configure时设置配置参数为-no-mouse-pc -no-mouse-bus -no-mouse-yopy -no-mouse-vr41xx 。
以该编译好的QTE库为基础,编译应用程序;
在目标机上,要将触摸屏驱动链接好。在QTE3.0的版本中,如果定义了上述的两个IPAQ相关的宏,其默认打开设备文件/dev/h3600_tsraw。如果只定义QT_QWS_IPAQ,则打开设备文件为/dev/h3600_ts。
在目标机上,设定环境变量:QWS_MOUSE_PROTO=linuxtp:/dev/h3600_tsraw。

(2)使用tslib方法;
编译TSLIB1.3:
进行如下操作
#./autogen.sh #生成configure文件
CC= $ARM_TOOL_PATH/arm-linux-gcc
CXX= $ARM_TOOL_PATH/arm-linux-g++
./configure --host=arm-linux --target=arm-linux --disable-inputapi --prefix=$PWD/build
make
make install
将build的整个目录拷贝到目标机,然后在目标机做如下设定,修改/etc/profile文件,在其中加入以下环境变量的设置
export V_ROOT=/xxx/xxx/build #目标机上build所在的路径
export TSLIB_TSEVENTTYPE=H3600 #设定类型为H3600,其主要是对着tslib中的设备结构体定义,该定义要与触摸屏驱动中的一致
export TSLIB_CONSOLEDEVICE=none #设定控制台设备为none,否则默认为/dev/tty。在tslib1.3源码中,只要不是none,它就会打开$(TSLIB_CONSOLEDEVICE)1,默认的为/dev/tty1的设备,然后从中读取console的可用设置。这样可以避免出现“open consoledevice: No such file or directory KDSETMODE: Bad file descriptor”的错误
export TSLIB_FBDEVICE=/dev/fb0 #指定帧缓冲设备
export TSLIB_TSDEVICE=/dev/touchscreen/0raw #指定触摸屏设备节点文件
export TSLIB_CALIBFILE=$V_ROOT/etc/pointercal #指定触摸屏校准文件pintercal的存放位置
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf #指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins #指定触摸屏插件所在路径
编译TSLIB1.4(TSLIB070 ..
#4 [keisuo 06-05 13:55]
如何创建Qt/Embedded开发环境

FriendlyARM

本文适用于友善之臂基于S3C2410X的任何一种目标板
注意:为了保证您能够正确执行本文的步骤,请务必按照“ 完全安装Redhat 9.0 Step by Step”一文正确安装您的Redhat 9.0系统

--------------------------------------------------------------------------------


1. 解压源代码,配置Qt库的路径
2. 使用build脚本编译Qt/Embedded
3. Hello,SBC-2410X for X86
4. Hello,SBC-2410X for ARM
5. 常见的编译错误
--------------------------------------------------------------------------------


1. 解压源代码,配置Qt库的路径

把光盘放入DVD-ROM,执行以下步骤:
Step1 挂接光盘
#mount /dev/cdrom /mnt/cdrom
Step2 进入Qt 开发包目录
#cd /mnt/cdrom/SBC-2410X-Linux/EmGUI
Step3 安装X86 版本的Qt 和Qtopia 源代码
#tar xvzf x86-qtopia.tgz –C /friendly-arm #该步将在/friendly-arm下生成x86-qtopia目录
Step4 安装SBC-2410X 版本的Qtopia 源代码
#tar xvzf arm-qtopia.tgz –C /friendly-arm #该步将在/friendly-arm目录下生成arm-qtopia目录
Step5 弹出光盘
#cd /
#eject

为了在PC上模拟运行Qtopia,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt(Redhat安装时带有Qt库,但不适合我们最新安装的版本),修改后的ld.so.conf文件内容如下:
/friendly-arm/x86-qtopia/qt/lib
/friendly-arm/x86-qtopia/qtopia/lib
/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/sane
/usr/lib/mysql

--------------------------------------------------------------------------------


2. 使用build脚本编译Qt/Embedded

(1)编译Qt/Embedded for X ..

回复 发表
主题 版块