qt/embedded 2.3.10 移植

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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章