1. 程式人生 > >編譯Qt arm庫並在開發板執行

編譯Qt arm庫並在開發板執行

Qt的ARM版編譯

____________________________________________________________________________________________________________________________________

交叉編譯器:buidroot-2012.08

                       :qt-everywhere-opensource-src-4.6.4.tar.gz

先把準備工作做好!

建立下載目錄:/home/lzj/fl2440/3rdparty/qt_install

進入原始碼目錄,新增配置指令碼:

#!/bin/sh
./configure -prefix /home/lzj/fl2440/3rdparty/qt_install \
-release \
-shared \
-fast \
-no-largefile \
-qt-sql-sqlite \
-no-qt3support \
-no-xmlpatterns \
-no-mmx \
-no-3dnow \
-no-sse \
-no-sse2 \
-no-svg \
-no-webkit \
-qt-zlib \
-qt-gif \
-qt-libtiff \
-qt-libpng \
-qt-libmng \
-qt-libjpeg \
-make libs \
-xplatform qws/linux-arm-g++ \
-nomake tools \
-nomake examples \
-nomake docs \
-nomake demo \
-no-nis \
-no-cups \
-no-iconv \
-no-dbus \
-no-openssl \
-embedded arm \
-little-endian \
-qt-freetype \
-depths 16,18 \
-no-glib \
-qt-mouse-tslib \
-no-javascript-jit \
-no-script \
-no-scripttools \
-qt-gfx-transformed \  
-qt-gfx-linuxfb \ 


修改原始碼:vim /home/lzj/fl2440/3rdparty/qt4_source/qt-everywhere-opensource-src-4.6.4/mkspecs/qws/linux-arm-g++/qmake.conf

                                                                                                                         
   #
   # qmake configuration for building with arm-linux-g++
   #
   
   include(../../common/g++.conf)
   include(../../common/linux.conf)
   include(../../common/qws.conf)
   
   QMAKE_INCDIR = /home/lzj/fl2440/3rdparty/ts_install/include
  QMAKE_LIBDIR = /home/lzj/fl2440/3rdparty/ts_install/lib
  
  
  # modifications to g++.conf
  QMAKE_CC                = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -lts
  QMAKE_CXX               = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-g++ -lts
  QMAKE_LINK              = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-g++ -lts
  QMAKE_LINK_SHLIB        = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-g++ -lts
  
  # modifications to linux.conf
  QMAKE_AR                = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ar cqs
  QMAKE_OBJCOPY           = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-objcopy
  QMAKE_STRIP             = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip
  
 load(qt_config)
                                                                                                                                  
                                                                                                                                   
                                                                                                                                   
                                                                                                                                                               
上面主要是放你tslib庫的路徑和你交叉編譯器的路徑,全用絕對路徑!(血的教訓)

不然會出現下面錯誤:

The tslib functionality test failed!
    You might need to modify the include and library search paths by editing
    QMAKE_INCDIR and QMAKE_LIBDIR in

vim  /home/lzj/fl2440/3rdparty/qt4_source/qt-everywhere-opensource-src-4.6.4/src/gui/itemviews/qabstractitemview.cpp

將'Key_BackSpace' 更改為將'Key_Backspace'

不然就是這個錯誤:

itemviews/qabstractitemview.cpp:2311: error: 'Key_BackSpace' is not a member of 'Qt'

如果你出現了下面這個錯誤:The specified system/compiler is not supported:

解決方法是:

cd ~
vim ./bash_profile 
export MKSPECS=/home/lzj/fl2440/3rdparty/qt4_source/qt-everywhere-opensource-src-4.6.4(就是你qt原始碼目錄)

____________________________________________________________________________________________________________________________________

OK已經移植好了,再把qmake放到你的usr/local/bin裡面去吧,不然找不到這個命令,或者你自己加個路徑export

對於程式的編譯只需要幾步

qmake -project

qmake 

make

就可以了

—————————————————————————————————————————————————————————————————————————————

將庫移植到開發板,我的選擇是將所有庫都打包然後sz到電腦,再tftp到開發板,一共3個庫,qt的lib ,fonts(這個在qtlib裡面有一個資料夾),還有就是tslib(關於tslib的移植看我前面的部落格)http://blog.csdn.net/liuzijiang1123/article/details/45670049

然後就是改根檔案系統的配置檔案。

這個是我的配置檔案vim /etc/profile

 export PATH=\
   /bin:\
   /sbin:\
   /usr/bin:\
   /usr/sbin:\
   /usr/local/bin:\
   /apps/bin:\
  /apps/tools:\
  /apps/tslib/bin\
  
  export PS1='\w >: '
  
  export USER=`id -un`
  export LOGNAME=$USER
  export HOSTNAME=`/bin/hostname`
  export HISTSIZE=500
  export HISTFILESIZE=500
  export PAGER='/bin/more '
  export EDITOR='/bin/vi'
  export INPUTRC=/etc/inputrc
  export network_cfg_dir=/apps/etc/network
  export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/tslib/lib:/apps/qtlib:/apps/fonts
  export network_cfg_dir=/apps/etc/network
  
  #touch screen tslib setting
  export TSLIB_ROOT=/apps/tslib
  export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
  export TSLIB_TSDEVICE=/dev/event1
  export QWS_MOUSE_PROTO=TSLIB:/dev/event1
  export TSLIB_CONSOLEDEVICE=none
  export TSLIB_FBDEVICE=/dev/fb0
  export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
  export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
  export QTLIB=/apps/qtlib
  export QT_QWS_FONTDIR=/apps/fonts
  ### Some aliases
  alias vim='vi'
  alias ll='ls -l'
  alias l.='ls -d .*'
  alias df='df -h'

如果執行程式的時候還是找不到庫,那麼就手動把這個庫放到/lib下就行

裡面的event1是你觸控式螢幕的event.你可以cat /dev/event1 在螢幕上亂按,只要有亂碼輸出則表示是觸控式螢幕的event,有的可能是event0

如果你qt程式執行點滑鼠點了沒用的話,就是下面這2個環境變數沒設定對

export QWS_MOUSE_PROTO=TSLIB:/dev/event1
export TSLIB_TSDEVICE=/dev/event1

如果你的Qt在PC上顯示和開發板上顯示大小不一樣的話:

export QWS_SIZE=480x272//這句可以將開發板的螢幕引數傳遞給Qt程式,然後就可以在Qt中正確設定視窗大小了

如何還有這個錯誤:QFontDatabase: Cannot find font directory /home/lzj/fl2440/3rdparty/qt_install/lib/fonts - is Qt installed correctly?
Aborted

解決方法:

export QT_QWS_FONTDIR=/apps/fonts

OK!最後執行的時候敲 ./a.out -qws  為什麼要加-qws大家可以去了解一下,如果想列印中文的話

 ./a.out  -qws -font wenquanyi

雖然看起來就這幾步,可以我真的是花了好久,網上看了好多,然後都有差,最後能實現我真是日了狗!昨天看了肖申克的救贖,希望還是要有的!!!!

貼上圖片: