zoukankan      html  css  js  c++  java
  • qtopiax86安装配置及编程方法

    安装:

    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
    make -C src
    cd ..

    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
    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

    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
    make
    然后再:
    echo yes |./configure -embedded arm –thread –qt-mouse-tslib –I$QTDIR/include –L$QTDIR/lib
    make
    此法不通,虽然编译通过,但触摸屏不可使
    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
    /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]’:
    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
    成功编译的方法:
    更改qt-2.3.2文件夹中src/tools/qvaluestack.h第57行源代码:
    remove (this->formLast() );为:
    this->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自带程序与功能的目的。

  • 相关阅读:
    使用 RestSharp 调用 WebAPI 接口
    Android Studio 下载安装目录
    多线程之await/async
    ScriptX进行Web打印
    Sqlserver 查询最新修改过的表、过程和视图等
    SqlServer中的bit类型
    .Net 6
    PDA 使用总结
    SQL Server 发布订阅 发布类型详解
    Profile对象
  • 原文地址:https://www.cnblogs.com/feisky/p/1704957.html
Copyright © 2011-2022 走看看