原文:http://www.cnblogs.com/Jasonsblog/p/3757985.htmlhtml
http://blog.csdn.net/sno_guo/article/details/16897577 linux
最近開始正式接觸QT開發,網上看了些移植教程都寫的有點亂,博客園的emouse思·睿有一篇寫的很好的文章,下面是文章的連接web
http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.htmlsql
我結合本身編譯移植過程當中遇到的問題從新整理下,寫下這篇博客,大部分跟上面的同樣,但也有些原帖沒有的東西,算是一個總結。函數
就像上面那位老兄說的「Linux的東西搞起來麻煩的地方就在於太雜、太散」,這個我十分贊成,有時候少作了那麼一個步驟,後面就會出錯,到網上搜半天才能解決。這就是所謂的蛋疼吧。工具
QT個各版本之間是存在差別的,qt-creator和qt-library儘可能用最新的吧。測試
先大體說一下整個過程:ui
首先,在PC上交叉編譯tslib和Qt(交叉編譯是爲了生成在開發板上能用的文件),而後將生成文件下載或拷到開發板上,我是用SD卡拷的。而後將開發板的環境變量設置好,移植就算成功了,大概過程就是這樣。spa
下面正式開始:.net
軟件平臺
Linux:Ubuntu 12.04(32位,儘可能用32位的,否則還得安裝32位的庫文件。)
qt-library:4.8.6
qt-creator:5.3.0
交叉編譯工具鏈:arm-linux-gcc (version 4.4.6)
tslib編譯與安裝
tslib是電阻式觸摸屏用於校準的一個軟件庫,是一個開源的程序,可以爲觸摸屏驅動得到的採樣提供諸如濾波、去抖、校準等功能,一般做爲觸摸屏驅動的適配層,爲上層的應用提供了一個統一的接口。所以這裏先編譯安裝tslib,這樣在後面編譯Qt的時候才能打包編譯進去。
準備工做:安裝如下三個軟件(原帖中autoconf無需安裝,另外需安裝libtool)
sudo apt-get install automake sudo apt-get install autogen sudo apt-get install libtool
安裝完上面的3個軟件之後,將下載的tarlib-1.4源碼解壓編譯安裝
# tar -zxvf tslib-1.4.tar.gz # cd tslib # ./autogen.sh #./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/tslib
# make # make install
編譯過程當中,有一個問題,
#cd tests/ #vi ts_calibrate
修改以下
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) { cal_fd = open (calfile, O_CREAT | O_RDWR, 0777); } else { cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777); }
tslib的開發板移植與測試
將tslib文件夾整個拷到開發板/usr/local/目錄下,而後修改ts.conf文件
下面是ts.conf文件的第一行與第二行
# Uncomment if you wish to use the linux input layer event interface # module_raw input
去掉# module_raw input前面的註釋,必定要注意中間的空格也去掉,module頂格。
最後添加環境變量,經過超級終端在開發板系統中添加環境變量,能夠在開發板文件系統的/etc/profile文件裏添加,也能夠直接添加。(若修改/etc/profile,要當即使這些變量生效,還須要修改完後輸入命令source /etc/profile)
export set TSLIB_FBDEVICE=/dev/fb0
export set TSLIB_TSDEVICE=/dev/event3
export set TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
說明: TSLIB_TSDEVICE //觸摸屏設備文件名,這個須要選對
TSLIB_CALIBFILE //校準的數據文件,由ts_calibrate校準程序生成。 SLIB_CONFFILE //配置文件名。 TSLIB_PLUGINDIR //插件目錄 TSLIB_CONSOLEDEVICE //控制檯設備文件名 TSLIB_FBDEVICE //設備名 以上環境變量在實際開發中的實際配置能夠根據實際狀況決定。而這些指定的設備節點必定要和你的開發板上的/dev目錄下的設備節點相對應。
最後運行測驗程序
ts_calibrate 進行校驗 ts_test 進行測試
測試結果以下圖所示:(這裏就用他的圖了,懶得拍)
QT 的交叉編譯與安裝
首先配置,一樣是經過運行./configure來生成Makefile,因爲配置項較多,因此把它寫成一個腳本,以下
#!/bin/sh ./configure \ -opensource \ -confirm-license \ -release -shared \ -embedded arm \ -xplatform qws/linux-arm-g++ \ -depths 16,18,24,32 \ -fast \ -optimized-qmake \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-zlib \ -qt-libpng \ -qt-freetype \ -little-endian -host-little-endian \ -no-qt3support \ -no-libtiff -no-libmng \ -no-opengl \ -no-mmx -no-sse -no-sse2 \ -no-3dnow \ -no-openssl \ -no-webkit \ -no-qvfb \ -no-phonon \ -no-nis \ -no-opengl \ -no-cups \ -no-glib \ -no-xcursor -no-xfixes -no-xrandr -no-xrender \ -no-separate-debug-info \ -nomake examples -nomake tools -nomake docs \ -qt-mouse-tslib \ -I/usr/local/tslib/include \ -L/usr/local/tslib/lib exit
上面的主要參數含義說明以下:
-embedded arm: 表示將編譯針對 arm 平臺的 embedded 版本;
-xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉編譯器進行編譯;
-qt-mouse-tslib: 表示將使用 tslib 來驅動觸摸屏;
運行腳本
#chmod +x autoconfig #./autoconfig
成功後會出現以下信息
Qt is now configured for building. Just run 'make'. Once everything is built, you must run 'make install'. Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.4-arm To reconfigure, run 'make confclean' and 'configure'.
接下來執行make進行編譯
編譯完後執行make install 進行安裝。
能夠在文件夾/usr/local/Trolltech/下看到剛剛編譯好的Qt文件夾。
移植到開發板
將編譯的文件夾,PC中的/usr/local/Trolltech/Qt-4.8.6/,拷到開發板的/usr/local/目錄下,我是用SD卡拷的。
設置環境變量:
我直接修改profile文件 #vi /etc/profile
在最後加入如下內容
export set QTDIR=/usr/local/Qt-4.8.6 #目錄名要與拷貝的Qt文件夾名一致
export set LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export set PATH=$QTDIR/bin:$PATH
export set MANPATH=$QTDIR/man:$MANPATH
export set QT_QWS_FONTDIR=/usr/local/Qt-4.8.6/lib/fonts
export set QWS_MOUSE_PROTO=tslib:/dev/event3 #重要
當即使用變量
#source /etc/profile
到此爲止,QT的移植算是成功了
能夠用Qt自帶的示例程序來測試一下,
# cd /usr/local/Qt-4.8.6/demos/
此文件夾下有不少示例程序,隨便選一個運行。
例如
cd affine/ ./affine -qws
必需要加參數-qws