編譯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
上面主要是放你tslib庫的路徑和你交叉編譯器的路徑,全用絕對路徑!(血的教訓)# # 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)
不然會出現下面錯誤:
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
雖然看起來就這幾步,可以我真的是花了好久,網上看了好多,然後都有差,最後能實現我真是日了狗!昨天看了肖申克的救贖,希望還是要有的!!!!
貼上圖片: