天天看點

embedded qt 移植

Arm-Linux嵌入式QT/E環境的建立(qt/e 3.x系列)

         QT/E 3.x系列比QT/E 2.x系列有非常大的改進,大大提高了開發進度,不再使用tmake,安裝也更簡單。但目前在網上關于QT/E 3.x系列的介紹還是比較少,是以本文介紹一下QT/E 3.x系列的安裝。

一、建立arm交叉編譯工具鍊

       在安裝QT/E之前,應確定arm-linux交叉編譯工具鍊已經建立,如果還沒有可以參考以下步驟建立。

     1、下載下傳交叉編譯工具cross-2.95.3.tar.bz2(或其他版本如:cross-3.4.4.tar.bz2),這是已經制作好的arm交叉編譯工具鍊,隻需解壓及建交環境變量即可使用。

     2、把檔案cross-2.95.3.tar.bz2拷貝到一個檔案夾,這裡我用:/usr/local/arm這個目錄。 注意後面建立環境變量時要與之對應。

      3、解壓 tar   -xjvf    cross-2.95.3.tar.bz2

      4、建立環境變量 export    PATH=/usr/local/arm/2.95.3/bin:$PATH

或者也可以寫進檔案 ~/.bashrc中,這樣就不用每次開機都export啦。

             vi     ~/.bashrc

             在後面加上 export    PATH=/usr/local/arm/2.95.3/bin:$PATH

     到此arm-linux交叉編譯工具鍊就已經建好了。

二、編譯QT

        1、QT/E自由版可到官網ftp下載下傳。網址是:ftp://ftp.trolltech.com/qt/source/ 。可自己選擇一個版本下載下傳,個人認為QT/E 3.x系列比較好用,不過QT/E 2.x系列在網上的資料比較多。但建議不用qt/e 3.3.x 的版本,因為在本人開發的過程當中試用過qt/e 3.3.4和qt/e3.3.8,發現它們在ARM開發闆上占CPU的資源特高,一直占cpu 98%左右,現在我還沒找到原因,不知道有沒有哪位朋友也遇到這個問題。推薦用qt/e 3.1.0版本,我正在用,沒遇到什麼問題。

(注:問題已經得到解決,原來是鍵盤接口沒做好,等有空與大家分享一下移植鍵盤接口的過程)

         2、在這裡,本人假設用的是 qt-embedded-free-3.1.0.tar.bz2

         3、把檔案qt-embedded-free-3.1.0.tar.bz2 拷貝到一個檔案夾,這裡我用:/usr/local/arm這個目錄。 注意後面建立環境變量時要與之對應。

         4、解壓 tar   -xjvf   qt-embedded-free-3.1.0.tar.bz2  

             把解壓後的檔案夾qt-embedded-free-3.1.0改為qte。(可以不改,這裡是為了友善,注意後面建立環境變量時要與之對應)   

                        mv     qt-embedded-free-3.1.0     qte

         5、建立環境變量

                       vi     ~/.bashrc

               在後面加上

                       export QTDIR=/usr/local/arm/qte

                       export QTEDIR=$QTDIR

                       export PATH=$QTDIR/bin:$PATH

                       export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

              (請重新登陸,以使得環境變量生效)

          6、配置QT

            進入QT/E目錄:     cd    $QTDIR

              輸入:   ./configure  -embedded  arm   -thread  -no-cups -qvfb -depths 4,8,16,32

            上述選項: -embedded  arm 指目标平台為arm; -thread 表示支援qt線程,本人開發當中用到; -qvfb 表示支援虛拟緩沖幀工具qvfb;-depths 4,8,16,32 表示支援4,8,16,32 位的顯示顔色深度。還有很多選項就不一一列舉,請檢視 ./configure  -help。

         此外還有一個選項我沒用的是 -qconfig  local,你可以把一些開關變量寫到一個檔案qconfig-local.h 中,并把它放到$QTDIR/src/tools下。可參考這個目錄下的qconfig-small.h、qconfig-medium.h 、qconfig-large.h等檔案,直接使用它們也行,如:  -qconfig  small 。通過這些開關變量,可以把一些開發當中用不着的構件去掉,減少qt庫的大小。這裡要對QT比較熟練,初學者可先不理。

            (本人在家裡編譯到這裡曾出現編譯 $QTDIR/include/qvaluestack.h 這個檔案的時候出錯,後來把qt3.3.8對應的檔案拷貝過來覆寫便通過了,估計是與gcc的版本不相容的問題,我在公司裡沒出現過這種問題)

         7、編譯

            make sub-src      // 指定按精簡方式編譯開發包,也就是說有些Qt 類未被編

譯。

          8、測試

                  至此編譯工作完成,最後測試一下是否能正常使用。我們可以用QT自帶的例子來測試,如:

                  cd  $QTDIR/examples/aclock      //或你自己建立一個QT工程也行

                  make clean                              //把原來的清掉

                   rm    *.pro      Makefile                       //删掉,重建立立工程檔案

                   qmake   -project

                    qmake   -spec  $QTDIR/mkspecs/qws/linux-arm-g++   -o  Makefile           

                -spec指定目标闆的配置檔案,這裡我做的是linux arm平台,注意在這裡,$QTDIR/mkspecs/qws/linux-arm-g++ 它不是編譯器,是一個配置檔案,而編譯時用的編譯器是我們在第一步建立的arm交叉編譯工具鍊裡面的編譯器。 

                   make                      

             如果沒出錯就表示你的QT/E環境已經成功建立。如果提示說cannot   find   -lqte, 那麼你試一下修改Makefile檔案,找到-lqte ,把它改為-lqte-mt再make一次一般就行了。這是因為如果用到QT線程或其它一些原因,它生成的庫不再是libqte.so.3.1.0,而是libqte-mt.so.3.1.0,是以它便找不到了。

三、移植到開發闆(以下都是在目标機環境下)

        1、建立一個目錄,如:/qt/lib。進入此目錄 cd   /qt/lib

        2、通過 ftp  把上面生成的qt庫檔案libqte-mt.so.3.1.0下載下傳到開發闆/qt/lib/目錄下。(注意:不要用wget 下載下傳,會破壞庫檔案,進而出現  ld.so: dynamic-link.h: 62: elf_get_dynamic_info: Assertion `! "bad dynamic tag"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' failed!.這種錯誤)

        3、建立qt庫連接配接:

                ln   -s   libqte-mt.so.3.1.0     libqte-mt.so

                ln   -s   libqte-mt.so.3.1.0     libqte-mt.so.3

                ln   -s   libqte-mt.so.3.1.0     libqte-mt.so.3.1

        4、建立環境變量

                       vi     ~/.bashrc

               在後面加上

                       export QTDIR=/qt

                       export QTEDIR=$QTDIR

                       export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

           4、到此目标闆的環境已經建好。現在可以把上面的例子aclock下載下傳到目标闆上試一下能不能跑起來!

             在開發闆控制台下輸入:  ./aclock  -qws 

             如果能跑起來但是鍵盤用不了,那是正常的情況,因為鍵盤、滑鼠等裝置的接口還沒加進QT/E的原因,而這個不是一兩句話能說清的,是以留到以後再另外補充!

補充一點:如果有類似這樣的提示:  "./aclock: error while loading shared libraries: libstdc++.so.6: cannot load shared object file: No such file or directory." 你可以從我們第一步建立的arm交叉編譯工具鍊裡的/usr/local/arm/2.95.3/arm-linux/lib/目錄下找到相應的庫檔案下載下傳到開發闆的 /lib 目錄下即可。

轉載于:https://www.cnblogs.com/weifuqin530/archive/2008/12/30/1365597.html