天天看点

qtopia-x86安装配置及编程方法

安装:

1)download the qtopia-free-src-2.2.0.tar.gz

2)tar zxvf qtopia-free-src-2.2.0.tar.gz

3) cd qtopia-free-2.2.0

4) export PATH=$PWD/tmake/bin:$PATH

5)./configure,然后输入"yes"

6)make

7) make install

MagicARM的安装脚本:

#!/bin/bash

echo remove old dirs

rm -rf tmake

rm -rf qt

rm -rf qt-x11

rm -rf qtopia

echo Unpack all packages

tar xzvf tmake-1.11.tar.gz

tar xzvf qt-embedded-2.3.7.tar.gz

tar xzvf qt-x11-2.3.2.tar.gz

tar xzvf qtopia-free-1.7.0.tar.gz

echo rename

mv tmake-1.11 tmake

mv qtopia-free-1.7.0 qtopia

mv qt-2.3.7 qt

echo Start Install Qt-X11

cd qt-2.3.2

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

#cp bin/uic $QTEDIR/bin

cp bin/?* ../qt/bin

cd ..

#cp $QTDIR/bin/?* qt/bin

mv qt-2.3.2 qt-x11

echo Start Setting env-var

export QTDIR=$PWD/qt

export QTEDIR=$QTDIR

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 LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

echo Start build Qt/Embedded

cd qt

make clean

cp $QPEDIR/src/qt/qconfig-qpe.h src/tools

(echo yes; echo yes)|./configure -platform linux-generic-g++ -qconfig qpe -qvfb -depths 16,24,32

echo Start Build Qtopia

cd qtopia/src

./configure -platform linux-generic-g++

make

echo OK

Qtopia-2.2.0 Linux  程序的开发

  1.   配置环境变量:source  set-arm-env

2.    新建程序hello.cpp,编写程序

3.   progen -t app.t -o hello.pro

4.    tmake -o  Makefile hello.pro

5.   修改Makefile

        LIBS    =    $(SUBLIBS) -L$(LIBDIR) -lm -lqte -lstdc++

6.  make

7. 新建hello.desktop, 并添加执行权限chmod +x  hello.desktop

[Desktop Entry]

Comment[]=A Hello Program

Exec=hello

Icon=Hello

Type=Application

Name[]=Hello

8.   qvfb -width 480 -height 272 & 

      ./hello -qws

或着,复制hello.desktop到Qtopia安装目录的apps/Applications目录下,复制hello到Qtopia安装目录的bin下,重启开发板即可在qpe中运行程序: qpe &

备注             安装时相关问题的处理方法:

问题一:

../include/qstring.h:199: error: cannot bind packed field '((QChar*)this)->QChar::ucs' to 'ushort&'

解决办法:qstring.h中

  199 //    ushort &unicode() { return ucs; }

  200         ushort &unicode() { ushort& tmp = ucs; return tmp; }

问题二:

make[3]: /home/zozowit/cross/qt-embedded-free-3.3.4/bin/uic:命令未找到

解决办法:之后经过查找安装相关库支持:

    libfreetype6-dev    uuid-dev    lib.jpeg62-dev   libqt3-mt   libpam0g-dev   libpng12-dev

    libbluetooth1-dev    libpcsclite-dev   pkg-config   jpeg-6b

uic编译器(它将qt2-designer创建的UI格式的文件转换成cpp文件),你可以下载QT/X11编译生成uic,也可以从网上下载一个uic。

问题三:

/qt/qtx11/include/qvaluestack.h:57: 错误:不能从 ‘QValueListIterator<QMap<QString, QString> >’ 转换到 ‘const char*’,为实参 ‘1’(属于 ‘int remove(const char*)’)

/qt/qtx11/include/qvaluestack.h: In member function ‘T QValueStack<T>::pop() [with T = QString]’:

成功编译的方法:

问题四:

/usr/bin/ld: skipping incompatible /home/hjcai/qt-arm/qte-arm-tslib/lib/libts.so when searching for -lts

/usr/bin/ld: cannot find –lts

读错误信息发现是编译到src/moc出现上述问题,

于是先:

echo yes |./configure -embedded arm -thread 

cd src/moc

然后再:

echo yes |./configure -embedded arm –thread –qt-mouse-tslib –I$QTDIR/include –L$QTDIR/lib

此法不通,虽然编译通过,但触摸屏不可使

qt-embedded-free-3.0.4版本打上tslib补丁是可用的,转屏虽然./configure中无对应参数,但在运行前

export QWS_DISPLAY='Transformed:Rot90'即可实现转屏

问题五:

更改qt-2.3.2文件夹中src/tools/qvaluestack.h第57行源代码:

remove (this->formLast() );

为:

this->remove (this->formLast() );

问题六:

/arm-target/qt-2.3.7/include/qsortedlist.h:51: error: there are no arguments to `clear' that depend on a template parameter, so a declaration of `clear' must be available

改成this->clear()

然后从/usr/bin下吧uic文件拷到qt的bin下

./configure -prefix /usr/qtopiacore3 -xplatform qws/linux-arm-g++ -thread -embedded arm -depths 16 -no-qvfb -qt-gfx-transformed -nomake examples -qt-mouse-tslib -I/home/zozowit/cross/tslib_build/include -L/home/zozowit/cross/tslib_build/lib

错误七:

error: ‘QWSInputMethod’ has not been declared

修正方法:

cd $QTDIR/src/kernel //$DTDIR=/home/opiehome/qt-2.3.10

gedit qwindowsystem_qws.h

在前面增加以下两行

class QWSInputMethod;

class QWSGestureMethod;

错误八:

qvaluestack.h:57: 错误:不能从 ‘QValueListIterator<QString>’ 转换到 ‘const char*’,为实参 ‘1’(属于 ‘int remove(const char*)’)

gedit $QTDIR/include/qvaluestack.h &

将remove( this->fromLast() );改为this->remove( this->fromLast() );

错误九:在Build Qt2.3.2时make出现如下问题:

xml/qxml.h:214: 警告:‘class QXmlReader’ 有虚函数却没有虚析构函数

xml/qxml.h:402: 警告:‘class QXmlContentHandler’ 有虚函数却没有虚析构函数

xml/qxml.h:419: 警告:‘class QXmlErrorHandler’ 有虚函数却没有虚析构函数

xml/qxml.h:428: 警告:‘class QXmlDTDHandler’ 有虚函数却没有虚析构函数

xml/qxml.h:436: 警告:‘class QXmlEntityResolver’ 有虚函数却没有虚析构函数

xml/qxml.h:443: 警告:‘class QXmlLexicalHandler’ 有虚函数却没有虚析构函数

xml/qxml.h:456: 警告:‘class QXmlDeclHandler’ 有虚函数却没有虚析构函数

xml/qxml.cpp:1518: 警告:未使用的参数 ‘ret’

/qt/qtx11/include/qvaluestack.h: In member function ‘T QValueStack<T>::pop() [with T = QMap<QString, QString>]’:

xml/qxml.cpp:513:  instantiated from here

xml/qxml.cpp:2502:  instantiated from here

/qt/qtx11/include/qvaluestack.h:57: 错误:不能从 ‘QValueListIterator<QString>’ 转换到 ‘const char*’,为实参 ‘1’(属于 ‘int remove(const char*)’)

make[2]: *** [xml/qxml.o] 错误 1

make[2]: Leaving directory `/qt/qtx11/src'

make[1]: *** [sub-src] 错误 2

make[1]: Leaving directory `/qt/qtx11'

make: *** [init] 错误 2

remove (this->formLast() );为:

configure时要使用以下语句:

./configure -debug -no-opengl -no-xft

问题十:

g++ -c -pipe -Wall -W -O2 -D_REENTRANT -DQT_NO_QWS_VFB -DQTOPIA_DATA_LINKING -DQTOPIA_TARGET=\"qdawggen\" -DQTOPIA_TRTARGET=\"qdawggen\" -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -I/root/qtopia-free-2.2.0/qtopia/mkspecs/linux-g++ -I. -I/root/qtopia-free-2.2.0/dqt/include -I/root/myqpe/include -I../../../include -I/root/qtopia-free-2.2.0/dqt/include -I.ui/release-shared/ -I.moc/release-shared/ -o .obj/release-shared/qdawg.o ../../libraries/qtopia/qdawg.cpp

../../libraries/qtopia/qdawg.cpp:294: error: extra qualification 'QDawgPrivate::'on member 'QDawgPrivate'

问题估计是出在主机编译器gcc的版本上,因为使用redhat是可以成功编译的,不过这里也不管那么多了,解决这个问题再说吧。

解决方法首先想到的是不编译这个程序。那么怎样达到这个目的呢?因为qtopia下的所有的makefile都是由qtopia-free-2.2.0/src/general.pri这个文件产生的,因此在这里可以将qdawggen这个程序从tools里面的程序清单中去除,这样在编译前的makefile产生阶段就不会产生关于qdawggen这个程序的选项,从而达到不编译这个程序的目的。

从这个问题的解决可以知道,如果要对qtopia进行裁剪可以从这个

qtopia-free-2.2.0/src/general.pri文件入手,这个文件列出了所有要编译的程序,只要在这里进行添加、删除相应的程序选项就可以达到裁剪qtopia自带程序与功能的目的。

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/04/05/1704957.html,如需转载请自行联系原作者