• 9675阅读
  • 4回复

Qt/E自带程序的编译 [复制链接]

上一主题 下一主题
离线keisuo
 

只看楼主 倒序阅读 楼主  发表于: 2007-06-05
— 本帖被 XChinux 从 Qt Programming 移动到本区(2008-07-18) —
    今天尝试着对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》
[ 此贴被XChinux在2008-07-18 15:22重新编辑 ]
离线keisuo

只看该作者 1楼 发表于: 2007-06-05
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字体, 可以在源码包里找到,比较漂亮, 推荐。

如何把QtEmbedded程序移植为Qtopia程序?
Qtopia里提供了简单的宏来创建主窗口、应用style等, 最主要的改变在main函数。
参考qtopia/src/applications/clock/main.cpp
--------------------------------------------------
#include "mymainwindow.h"
#include <qtopia/qpeapplication.h>
QTOPIA_ADD_APPLICATION("myappname", "MyMainWindow")
QTOPIA_MAIN
---------------------------------------------------
这一步很简单把,cp过来改改类名和binary的名字就OK了。
需要注意的是你的mainwindow的构造函数要符合(QWidget*p, const char* name, int f)的形式(三个参数)

相应的,修改pro文件。 参考qtopia/src/applications/clock/clock.pro
其中最重要的一行是 CONFIG+= qtopiaapp
这样编出来是quicklaunch插件程序(applications目录下的程序默认config是quichlaunch, 别的目录不是哦~)

要想编成独立的应用, 加上这句:CONFIG -= buildQuicklaunch

大功告成!

如何将自己的应用添加到qtopia桌面里?
首先把你的应用修改成qtopia应用程序(见上一个问题)。
然后把你的程序cp到qtopia程序默认的搜索路径中:
应用程序放到SRCDIR/qtopia/image/opt/Qtopia/bin下;(后面的SRCDIR/qtopia/image/opt/Qtopia简写为"...")
quicklaunch插件放到../plugins/application下。

假设你编译得到的quicklauncher插件叫libmybin.so, 则相应的需要在../bin下建立一个链接文件: ln -s quicklauncher mybin

另外,还需要创建一个desktop文件(找个现成的改改), 把这个desktop文件放到qtopia的
../apps/Applications下。

desktop 文件里最重要的信息是关联的执行档名称和图标文件的名称。 执行档名称和上文中的mybin对应, 图标的话desktop文件里只写了一个文件的名字,但实际上qtopia去搜索的时候会到以执行档的名字命名的子目录去寻找该icon文件, 也就是.../pics/mybin/xxx.png。

以上环境都弄好后, 你进到Applications页面里就能看见自己的应用程序了。

如何设置Qtopia的字体?
2.x系列版本在运行时的$HOME/Settings/下有个qpe.conf文件, 其中的[Apperance]下的FontFamily字段设置字体, FontSize设置字号。

Qtopia 和Qte程序都会在运行时的$QTDIR/lib/fonts目录里搜索字体, 所以你要用的字体也要放在这个地方。 另外还要根据需要修改该目录下的fontdir文件。这个文件是字体(FontFamily, FontSize...)与实际的字体文件的映射, 要写正确才能找到字体文件, 所以不可马虎。

为什么QtEmbedded自带的例子无法编译通过?
在编译例子的时候经常会出现这样的提示信息,无法编译:
“#make
Some of the required modules (full-config) are not available.
Skipped.”

这是怎么回事呢?
我想大家应该知道qte的库可以通过修改qconfig来增删一些特性吧, 也就是说通过定义一些宏可以去掉qte库包含的class定义,以减小qte库的大小。 所以说不同的config下编译出来的qte库多数情况下是不兼容的。

大家可以从该例子的.pro文件中获得一些信息(比如aclock这个例子),在pro文件中往往会有这么一行:
REQUIRES+=full-config
这 句话表明,这个qte应用用到的类只有在full-config才能满足。 所以如果你用的是别的config选项干脆就不让你编译。 如果你非要编译也不是不可能,把这个限制去掉重新生成Makefile就可以了,不过很可能会出现undefined reference或者找不到类之类的错误, 大家要做好心理准备......

要想成功编译qte的例子还有个方法是用-qconfig all参数configure QtEmbedded, 这样qte库包含所有的特性, 肯定什么例子都能编过去。

如何裁减QtEmbedded库?
QtEmbedded定义了一系列的features, 用
#ifndef NO_XXX
#endif
的方式把特性相关的代码包围在特定的宏里,这样如果定义了某个NO_XXX的宏,就是去掉了该特性, 从而达到减少编译的代码,进而减小libqte的大小的目的。

你 在configure qte的时候有一个-qconfig xxx参数, 这个xxx指定的是包含features宏的头文件, 比如qtopia里带的qconfig-qpe.h就是专门为qtopia量身定制的宏定义文件, 该文件里去掉了qtopia未用到的feature(如打印等)。如果configure时不指定-qconfig参数,则会提示你从qte预先定义好的 qconfig中选择一个,如small/large/full, 这三项对应不同的qconfig-xxx文件, 每个文件包含不同的feature定义。 具体的位置在:$QTEDIR/src/tools/qconfig-xxx.h

我们要裁减qte库最好是建立一个自己的qconfig-myconfig.h文件, 把自己的程序未用到的特性对应的宏定义在这个文件里。 configure qte的时候加-qconfig myconfig选项,这样就可以使用自己的feature定义文件了。

另外需要注意的一点是, feature之间有依赖关系,你disable某个特性很可能连带其他一些特性也被disable。 所以还要参看$QTEDIR/src/tools/qfeatures.h中对feature依赖关系的描述。

feature宏对应的功能参见文档:
http://doc.trolltech.com/qtopia2.0/html/features.html

Good Luck!


如何改变qvfb桌面的默认颜色(绿色)?
qte 2.x里提供的API:
QWSServer::setDesktopBackground(const QColor&);
QWSServer::setDesktopBackground(const QImage&);

qtopia core 4里提供的API:
QWSServer::setBackground(const QBrush&);

默认的颜色在源码的qwindowsystem_qws.cpp文件, QWSServer的构造函数里赋值,也可以直接去修改源码。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1548996
离线keisuo

只看该作者 2楼 发表于: 2007-06-05
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 set HOME=/root

export set PATH=$QPEDIR/bin:$PATH

export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib

$QPEDIR/bin/qpe > /dev/null 2>/dev/null


之后就出现了类似系统安装的界面,让选择语言、时区什么的。不过当看到了激动人心的qtopia桌面时似乎就死机了。可能占用cpu太多。不过在QQ群里问了一下,人家的能流畅运行。可能还有些问题要解决。
离线keisuo

只看该作者 3楼 发表于: 2007-06-05
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(TSLIB07072006)

进行如下操作:

echo "ac_cv_func_malloc_0_nonnull=yes" > tslib/arm-linux.autogen #为了防止出现undefined reference to `rpl_malloc' 错误

CONFIG_SITE=arm-linux.autogen ./configure CC=arm-linux-gcc CXX=arm-linux-g++ --host=arm-s3c2410-linux-gnu --target=arm-s3c2410-linux-gnu --disable-input --disable-arctic2 --disable-mk712 --disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-h2200 --with-gnu-ld --prefix=$PWD/build

make

make install

将build的整个目录拷贝到目标机,然后在目标机做如下设定,修改/etc/profile文件,在其中加入以下环境变量的设置。其解释类上,不同于TSLIB1.3的是,TLIB1.4通过配置文件ts.conf中module_raw h3600语句来加载对应的设备结构体定义。已废除了TSLIB_TSEVENTTYPE宏。

export V_ROOT=/xxx/xxx/build

export TSLIB_TSDEVICE=/dev/touchscreen/0raw

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$V_ROOT/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

一个值得注意的问题是:TSLIB1.4在ts_config函数中通过while((p=fgets(buf,BUFF_SIZE,f))!=NULL)来加载ts.conf中的语句,而buf只有512byte。所以对于ts.conf没有用的定义语句,请将其删除,以防止误发生段错误。

以TSLIB库为基础,编译QTE。

QTE2.3.10直接支持-tslib选项开关的应用。不用修改任何文件。可以通过网上所说的拷贝tslib.h头文件及库文件到QTE相关目录来进行编译(对于tslib1.4,还要拷贝tslib_private.h)。也可以在./configure进指定-L<path to tslib library> -I<path to tslib header>来防止出现找不到相应库文件 的错误。(对于tslib1.4,应该还加上-lts选项)。

对于其它版本的QTE,可以通过在QTE文件夹路径下执行grep -lir 'tslib' *来查看是否有对tslib的支持,如果没有则需要对源码进行相应的修改。(onebyte注:虽然网上说有补丁可下,但俺一直没找到相关的patch,但看看QTE2.3.10的源码后再做相应的修改还算比较方便:)





[onebyte后记]:

由于是一个人在做基于embedded linux的软件开发,没有他人直接的交流,所以摸索QTE触摸屏支持的过程是相当辛苦的!网上关于这一块的说法不一,使得自己对QTE触摸屏支持的方法很长时间辨不清方向。但在这里还是要非常感谢网上的许多朋友,正是通过大家的讨论才将这块内容逐渐理通。

在这里特将这些方法记载下来,送给同我一样经历过困惑的朋友们:P

[参考网站]

网上各论坛中关于TSLIB内容的帖子不少,这里只记一些主要的论坛网站,有兴趣的可以到这上面去看看:

[1] 北京理工大学嵌入式linux BBS

[2] 华恒嵌入论坛

[3] Qt中文论坛

[4] QT Forum

[5] China Linux
离线keisuo

只看该作者 4楼 发表于: 2007-06-05
如何创建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 X86 
      #cd /friendly-arm/x86-qtopia
    #./build (该过程比较长,需要运行大概30分钟左右)
    #ldconfig
      注:运行ldconfig是为了使生成的qt和qtopia库有效,运行一次即可。
   
      (2) 在PC上模拟运行Qtopia
      #qvfb& 
      #qtopia
   
   

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

   
  3. Hello,SBC-2410X for X86
   
      (1)编译Hello, SBC-2410X 
      #cd /friendly-arm/x86-qtopia
    #. set-env ;注意,中间有个空格,必须要有才能执行有效!   
    #cd hello
    #make
      将在/friendly-arm/x86-qtopia/qtopia/bin目录下生成hello可执行文件
   
      (2)单独运行Hello, SBC-2410X 
      #qvfb -width 640 -height 480 & 
      #hello -qws 
      如图
 
在qvfb中单独运行Hello, SBC-2410X 
   
      (3)在Qtopia中运行Hello, SBC-2410X 
      #qvfb -width 640 -height 480 & 
      #qpe
      如图
 
在qtopia中的Hello, SBC-2410X

   

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

   
  4. Hello,SBC-2410X for ARM
   
      (1)编译Qt/Embedded for ARM 
      #cd /friendly-arm/arm-qtopia
    #./build (该过程比较长,需要运行大概30分钟左右) 
   
      (2)编译Hello, SBC-2410X for ARM 
      #cd hello
    #make
      编译完毕,hello将生成存在/friendly-arm/arm-qtopia/qtopia/bin目录下
   
      (3)把hello下载到目标板
  将可执行文件移动到 SBC-2410X 目前主要有两种方式:

      第一种方法:复制到介质(下面以优盘为例) 
      #mount /dev/sda1 /mnt
    #cp hello /mnt
    #umount /mnt
    把优盘拔下来插入到 SBC-2410X 的 USB HOST 端口,按照以下命令操作:
    #mount /dev/sda1 /mnt ;挂接优盘
    #cp /mnt/hello /opt/qtopia/bin ;把 hello 复制到/opt/qtopia/bin目录   
   
      第二种方法: 通过网络移动(推荐使用) 
      通过网络下载程序的主要步骤是:先把 hello 复制到 ftp 共享目录,然后在 SBC-2410X 上使用 ftp 下载,并修改执行权限运行,如下:
    在 PC 端执行:
    #cp hello /home/ftp ;把 hello 复制到 ftp 共享目录
    在SBC-2410X 端执行:
    #cd /opt/qtopia/bin ;进入bin目录
    #ftp 192.168.0.1 ;登录ftp服务器
    >get hello ;下载 hello
    >bye ;退出 ftp 登录
    #chmod a+x hello ;改变 hello 的可执行权限   
   
      (4)在目标板上单独运行hello
      export set HOME=/root
    export set QTDIR=/opt/qt
    export set QPEDIR=/opt/qtopia
    export set QWS_KEYBOARD="USB:/dev/input/event1"
    export set QWS_MOUSE_PROTO="USB:/dev/input/mouse0"
    export set PATH=$QPEDIR/bin:$PATH
    export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib
    $QPEDIR/bin/hello -qws 
   
      (5)在Qtopia中运行hello
      export set HOME=/root
    export set QTDIR=/opt/qt
    export set QPEDIR=/opt/qtopia
    export set QWS_KEYBOARD="USB:/dev/input/event1"
    export set QWS_MOUSE_PROTO="USB:/dev/input/mouse0"
    export set PATH=$QPEDIR/bin:$PATH
    export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib
    $QPEDIR/bin/qpe > /dev/null 2>/dev/null
   

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

   
  5. 常见的编译错误
   
  (1) 执行build时出现的错误
  ./build 很长时间后,最后显示如下
Makefiles will be regenerated.
.................................................................................
QPE is now configured for building. Just run "make".
To reconfigure, run make clean and configure.

make -C libraries/qtopia
make[1]: Entering directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia'
make[1]: Nothing to be done for `default'.
make[1]: Leaving directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia'
make -C 3rdparty/libraries/freetype
make[1]: Entering directory `/friendly-arm/x86-qtopia/qtopia/src/3rdparty/libraries/freetype'
make[1]: Nothing to be done for `default'.
make[1]: Leaving directory `/friendly-arm/x86-qtopia/qtopia/src/3rdparty/libraries/freetype'
make -C libraries/qtopia1
make[1]: Entering directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia1'
g++ -c -I/friendly-arm/x86-qtopia/qtopia/include -I/friendly-arm/x86-qtopia/qt/include -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W -DNO_DEBUG -fPIC -DQTOPIA_APP_INTERFACE -I.moc/linux-generic-g++/ -I/friendly-arm/x86-qtopia/qtopia/src/server -o .obj/linux-generic-g++//global1.o global1.cpp
global1.cpp:39:23: uuid/uuid.h: 没有那个文件或目录
global1.cpp: In static member function `static QUuid Global::generateUuid()':
global1.cpp:188: `::uuid_generate' undeclared (first use here)
make[1]: *** [.obj/linux-generic-g++//global1.o] Error 1
make[1]: Leaving directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia1'
make: *** [libraries/qtopia1] Error 2 
  这是因为你没有正确安装Redhat 9.0所致,请参考 “ 完全安装Redhat 9.0 Step by Step”一文正确安装您的Redhat 9.0系统
   
  (2) 编译hello时出现的错误
  信息如下:
  /usr/lib/qt-3.1/bin/uic hello_base.ui -o ./hello_base.h
g++ -c -I/include -I/usr/lib/qt-3.1/include -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W -DNO_DEBUG -DQTOPIA_APP_INTERFACE -I.moc/linux-generic-g++/ -o .obj/linux-generic-g++//hello.o hello.cpp
g++ -c -I/include -I/usr/lib/qt-3.1/include -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W -DNO_DEBUG -DQTOPIA_APP_INTERFACE -I.moc/linux-generic-g++/ -o .obj/linux-generic-g++//main.o main.cpp
main.cpp:2:35: qtopia/qpeapplication.h: No such file or directory
main.cpp: In function `int main(int, char**)':
main.cpp:6: `QPEApplication' undeclared (first use this function)
main.cpp:6: (Each undeclared identifier is reported only once for each function
it appears in.)
main.cpp:6: parse error before `(' token
main.cpp:9: `a' undeclared (first use this function)
main.cpp:5: warning: unused parameter `int argc'
main.cpp:5: warning: unused parameter `char**argv'
make: *** [.obj/linux-generic-g++//main.o] Error 1
  从错误信息中可以看出,编译hello的时候这里用的是-I/include头文件目录,这个目录是不正确的,导致这样的原因是:您没有在build完之后运行ldconfig命令!
   
  (3) 编译hello时出现的第二种错误
  错误信息如下:
  [root@localhost hello]# make
/usr/lib/qt-3.1/bin/uic hello_base.ui -o ./hello_base.h
/usr/lib/qt-3.1/bin/uic: error while loading shared libraries: libqt-mt.so.3: cannot open shared object file: No such file or directory
make: *** [hello_base.h] Error 127 
  从错误信息中可见,您的x86-qtopia环境并没有搭建好,亦然使用redhat9.0自带的环境。解决办法如下:
  第一种办法:请务必在同一个窗口执行以上步骤。运行build脚本时,已经包含了环境的创建,您不能离开build运行后所在的窗口环境来编译hello
  第二种办法:自己创建重新创建环境。即使用/friendly-arm/x86-qtopia/set-env脚本。运行时请务必使用“. set-env ”,注意中间有个空格
  ,同样,您不能离开set-env运行后所在的窗口环境来编译hello
   
快速回复
限100 字节
 
上一个 下一个