qt/embedded 2.3.10 移植

来源:互联网 发布:jquery json remove 编辑:程序博客网 时间:2024/04/20 03:44

HOST主机         :  Red Hat 9 完全安装
交叉编译器       :  freescale提供的arm-926ejs-linux 版本 gcc-4.1.1-glibc-2.4-nptl-sf-1
需要用到的软件包 :  tmake-1.13.tar.gz   qt-x11-2.3.2.tar.gz    qt-embedded-2.3.10-free.tar.gz

一. 安装与建立Qt 桌面运行环境

第一步,解压安装包并设置环境变量
        tar –xzvf tmake-1.13.tar.gz
        tar –xzvf qt-x11-2.3.2.tar.gz
        tar –xzvf  qt-embedded-2.3.10-free.tar.gz
        mv  qt-2.3.10 qt-2.3.10-host
        export TMAKEDIR=$PWD/tmake-1.13
        export QT2DIR=$PWD/qt-2.3.2
        export QTEDIR=$PWD/qt-2.3.10-host

 环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包.
 
 注意: 在以下安装中,make命令执行前先执行一下make clean命令.

第二步,编译Qt/Embedded

1. Build Qt2.3.2
      cd $QT2DIR
      export TMAKEPATH=$TMAKEDIR/lib/linux-g++
      export QTDIR=$QT2DIR
      export PATH=$QTDIR/bin:$PATH
      export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
      make clean
      ./configure -no-xft
      make
      mkdir $QTEDIR/bin
      cp bin/uic $QTEDIR/bin/


 2. Build Qvfb
      export TMAKEPATH=$TMAKEDIR/lib/linux-g++
      export QTDIR=$QT2DIR
      export PATH=$QTDIR/bin:$TMAKEDIR/bin:$PATH
      export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
      cd $QTEDIR/tools/qvfb
      make  clean
      tmake -o Makefile qvfb.pro
      make
      mv qvfb $QTEDIR/bin/

       这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。


 3. Build Qt/Embedded
      cd $QTEDIR
      export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
      export QTDIR=$QTEDIR
      export PATH=$QTDIR/bin:$PATH
      export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
      make clean
      ./configure -no-xft -qvfb -depths 4,8,16,32       此时我选择的5
      make
 
第三步,查看运行结果
     如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo 来查看运行结果。

  在Virtual framebuffer 上运行:
      export QTDIR=$QTEDIR
      export PATH=$QTEDIR/bin:$PATH
      export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
      cd $QTEDIR/examples/launcher
      qvfb -width 640 -height 480 &
      sleep 10
      ./launcher -qws


二  Qt/E 的交叉编译


 1. Build Qt/Embedded
      tar –xzvf qt-embedded-2.3.10-free.tar.gz
      mv  qt-2.3.10  qt-2.3.10-target
      export PATH=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin:$PATH
      export TMAKEDIR=$PWD/tmake-1.13
      export QT2DIR=$PWD/qt-2.3.2
      export QTEDIR=$PWD/qt-2.3.10-target
      cd $QTEDIR
      export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
      export QTDIR=$QTEDIR
      export PATH=$QTDIR/bin:$PATH
      export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  
  修改tmake配置文件及qt-embedded配置

   vi $TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
    将  
     TMAKE_CC          = arm-linux-gcc
     TMAKE_CXX         = arm-linux-g++
     TMAKE_LINK        = arm-linux-gcc
     TMAKE_LINK_SHLIB  = arm-linux-gcc
     TMAKE_AR          = arm-linux-ar cqs
    改为
     TMAKE_CC          = arm-926ejs-linux-gcc
     TMAKE_CXX         = arm-926ejs-linux-g++
     TMAKE_LINK        = arm-926ejs-linux-g++
     TMAKE_LINK_SHLIB  = arm-926ejs-linux-g++
     TMAKE_AR          = arm-926ejs-linux-ar cqs

   vi $QTEDIR/configs/linux-arm-g++-shared
    将
     SYSCONF_CXX         = arm-linux-g++
     SYSCONF_CC          = arm-linux-gcc
     SYSCONF_LINK        = arm-linux-gcc
     SYSCONF_LINK_SHLIB  = arm-linux-gcc
     SYSCONF_AR          = arm-linux-ar cqs
    改为
     SYSCONF_CXX         = arm-926ejs-linux-g++
     SYSCONF_CC          = arm-926ejs-linux-gcc
     SYSCONF_LINK        = arm-926ejs-linux-g++
     SYSCONF_LINK_SHLIB  = arm-926ejs-linux-g++
     SYSCONF_AR          = arm-926ejs-linux-ar cqs
   
   vi $QTEDIR/configs/linux-arm-g++-shared-debug
   vi $QTEDIR/configs/linux-arm-g++-static
   vi $QTEDIR/configs/linux-arm-g++-static-debug
   这三个文件修改的地方同$QTEDIR/configs/linux-arm-g++-shared相同

  make clean
  ./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
  make

/**********************************************************************************************************************/
  出现错误:
    error: ‘QWSInputMethod’ has not been declared
  
  修改方法:
    cd $QTDIR/src/kernel
    vim qwindowsystem_qws.h

    在前面增加以下两行

    class QWSInputMethod;
    class QWSGestureMethod;

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

  修改方法:
    vim $QTDIR/include/qvaluestack.h

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

/**********************************************************************************************************************/

 这两个错误是由于编译器的版本太高导致的
   
 交叉编译成功!!                  哈哈

 

三 在ARM上运行

 1. 编译在arm上运行程序时需要的环境变量
  
  export TMAKEDIR=/work/tmake-1.13
  export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
  export PATH=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin:$PATH
  export QTEDIR=/work/qt-2.3.10-target
  export QTDIR=$QTEDIR 

原创粉丝点击