從零開始移植QT4.8.5之三--linux下交叉編譯QT執行庫
這篇文章要實現的目標是在linux下交叉編譯QT在嵌入式裝置OK6410的執行庫,最終在OK6410上執行QT演示程式。
1、觸控式螢幕庫檔案安裝tslib
首先如果嵌入式裝置上有觸控式螢幕,需要先移植tslib,這個不是本次的重點,所以我們就直接搭建編譯的時候需要的tslib庫,因為飛凌官方已經提供編譯好了的庫檔案,所以之需要解壓把庫檔案放到對應的位置就可以了。
解壓到準備好的目錄,這個目錄需要記住,後面在編譯QT的時候會用到,我的路徑是/home/linux/arm/tslib目錄下。
2、交叉編譯qt-everywhere-opensource-src
需要在上一篇文章中的壓縮包qt-everywhere-opensource-src-4.8.5.tar.gz,這裡需要重新解壓,因為如果已經configure過的會生成makefile檔案,qt的configure會檢測資料夾中是否有makefile,即使使用make clean也無法完全刪除配置檔案,在編譯的時候可能會產生各種各樣的路徑、編譯庫不一致的錯誤,所以最好的方法就是每次編譯之前都從新解壓。
tar zxvf xxx.tar.gz
解壓之後跳進解壓後的資料夾
輸入如下命令
echo yes | ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -prefix /home/linux/arm/qt-4.8.5-arm -I /home/linux/arm/tslib/include -L /home/linux/arm/tslib/lib
這裡說明幾個重要的設定
-prefix /home/linux/arm/qt-4.8.5-arm 這個是編譯好的檔案的目錄,這個目錄很重要,因為在開發板上也要將庫檔案放在這個目錄中,所以需要謹慎選擇。
-I /home/linux/arm/tslib/include 這個是剛剛解壓好的tslib庫的路徑下的include
-L /home/linux/arm/tslib/lib 這個是剛剛解壓好的tslib庫的路徑下的lib
這幾個需要根據自己的需求修改。
然後等著configure完成之後就可以經典的make&&make install
沒有意外的話就會在/home/linux/arm/qt-4.8.5-arm路徑下生成編譯好的庫檔案
3、提取開發板需要的庫檔案
#!/bin/bash TARGET_DIR=$PWD cd / list=`cat << EOF home/linux/arm/qt-4.8.5-arm/examples/widgets/wiggly/wiggly home/linux/arm/qt-4.8.5-arm/examples/painting/concentriccircles/concentriccircles home/linux/arm/qt-4.8.5-arm/lib/libQtSql.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtXml.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtSvg.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtSql.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtScript.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtXml.so home/linux/arm/qt-4.8.5-arm/lib/libQtMultimedia.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtScriptTools.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtGui.so home/linux/arm/qt-4.8.5-arm/lib/libQtSql.so home/linux/arm/qt-4.8.5-arm/lib/libQtGui.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtXml.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtCore.so home/linux/arm/qt-4.8.5-arm/lib/libQtGui.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQt3Support.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtTest.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtCore.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/fonts/unifont_160_50.qpf home/linux/arm/qt-4.8.5-arm/lib/libQtSvg.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtNetwork.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQt3Support.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtScript.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtScriptTools.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtNetwork.so home/linux/arm/qt-4.8.5-arm/lib/libQtScript.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtNetwork.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtTest.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtSql.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtMultimedia.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtTest.so home/linux/arm/qt-4.8.5-arm/lib/libQt3Support.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtTest.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtCore.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtScriptTools.so home/linux/arm/qt-4.8.5-arm/lib/libQtMultimedia.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQtSvg.so home/linux/arm/qt-4.8.5-arm/lib/libQtXml.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtCore.so.4 home/linux/arm/qt-4.8.5-arm/lib/libQtScriptTools.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtNetwork.so.4.8.5 home/linux/arm/qt-4.8.5-arm/lib/libQtMultimedia.so home/linux/arm/qt-4.8.5-arm/lib/libQtScript.so home/linux/arm/qt-4.8.5-arm/lib/libQtGui.so.4.8 home/linux/arm/qt-4.8.5-arm/lib/libQt3Support.so home/linux/arm/qt-4.8.5-arm/lib/libQtSvg.so.4 home/linux/arm/qt-4.8.5-arm/plugins/sqldrivers/libqsqlite.so home/linux/arm/qt-4.8.5-arm/plugins/accessible/libqtaccessiblewidgets.so home/linux/arm/qt-4.8.5-arm/plugins/accessible/libqtaccessiblecompatwidgets.so home/linux/arm/qt-4.8.5-arm/plugins/iconengines/libqsvgicon.so home/linux/arm/qt-4.8.5-arm/plugins/imageformats/libqico.so home/linux/arm/qt-4.8.5-arm/plugins/imageformats/libqsvg.so home/linux/arm/qt-4.8.5-arm/plugins/imageformats/libqtiff.so home/linux/arm/qt-4.8.5-arm/plugins/imageformats/libqjpeg.so home/linux/arm/qt-4.8.5-arm/plugins/imageformats/libqmng.so home/linux/arm/qt-4.8.5-arm/plugins/imageformats/libqgif.so home/linux/arm/qt-4.8.5-arm/demos/deform/deform home/linux/arm/qt-4.8.5-arm/demos/deform/pathdeform.html home/linux/arm/qt-4.8.5-arm/demos/embedded/embeddedsvgviewer/spheres.svg home/linux/arm/qt-4.8.5-arm/demos/embedded/embeddedsvgviewer/embeddedsvgviewer home/linux/arm/qt-4.8.5-arm/demos/embedded/embeddedsvgviewer/shapes.svg home/linux/arm/qt-4.8.5-arm/demos/embedded/embeddedsvgviewer/files/default.svg home/linux/arm/qt-4.8.5-arm/demos/embedded/embeddedsvgviewer/files/v-slider-handle.svg home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/embeddedsvgviewer.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/desktopservices_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/deform.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/flightinfo_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/raycasting.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/digiflip.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/styledemo.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/styledemo_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/mediaplayer.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/weatherinfo.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/concentriccircles.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/context2d_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/wiggly.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/lightmaps.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/elasticnodes.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/wiggly_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/ftp_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/embeddedsvgviewer_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/anomaly_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/flickable.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/softkeys_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/fridgemagnets_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/saxbookmarks_s60.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/screenshots/pathstroke.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/slides/demo_4.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/slides/demo_1.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/slides/demo_2.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/slides/demo_6.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/slides/demo_3.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/slides/demo_5.png home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/fluidlauncher home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher/config.xml home/linux/arm/qt-4.8.5-arm/demos/embedded/styledemo/styledemo home/linux/arm/qt-4.8.5-arm/demos/pathstroke/pathstroke.html home/linux/arm/qt-4.8.5-arm/demos/pathstroke/pathstroke EOF ` tar cfvz $TARGET_DIR/target-qte-4.8.5.tgz $list
根據自己的需要修改home/linux/arm/qt-4.8.5-arm路徑,如果QT的版本改變可以根據自己需要修改其中對應的版本號,4.8.5和4.8,其他的內容基本不需要改變。
之後把target-qte-4.8.5.tgz檔案拷貝到開發板的根目錄下,然後解壓就可以了,之後就會在開發板的/home/linux/arm/qt-4.8.5-arm目錄下會有QT庫檔案了。
到這個時候就可以在開發板上執行QT程式了,下面我們提供一個QT演示程式的指令碼檔案。
4、QT演示程式指令碼檔案
具體檔案如下
#!/bin/sh
base1=qpe
pid=`/bin/pidof $base1`
if [ -n "$pid" ]; then
killall $base1
fi
base2=qss
pid=`/bin/pidof $base2`
if [ -n "$pid" ]; then
killall $base2
fi
base3=quicklauncher
pid=`/bin/pidof $base3`
if [ -n "$pid" ]; then
killall $base3
fi
base4=fluidlauncher
pid=`/bin/pidof $base4`
if [ -n "$pid" ]; then
killall $base4
fi
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QTDIR=/home/linux/arm/qt-4.8.5-arm/
export LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin
if [ -c /dev/input/event2 ]; then
export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
rm /etc/pointercal
/root/tslib/build/bin/ts_calibrate
fi
else
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
>/etc/pointercal
fi
export QWS_KEYBOARD=TTY:/dev/tty1
FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)
#export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
case "$FB_SIZE" in
800,480)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
480,272)
export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
;;
*)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
esac
#export QWS_DISPLAY=:1
export HOME=/root/QtE4Home
cd /home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher
./fluidlauncher -qws
這個指令碼只能在OK6410開發板4.3寸螢幕上執行,具體的內容請讀者自己閱讀,下一篇文章我們會一起自己寫一個QT程式執行起來。那個時候我們來對自己的程式一些環境配置具體的講解。