1. 程式人生 > >Qt 4.8.6 X11、embeded x86(qvfb執行 )、embeded arm各個版本編譯總結

Qt 4.8.6 X11、embeded x86(qvfb執行 )、embeded arm各個版本編譯總結

QT是跨平臺C++圖形使用者介面應用程式開發框架,可以實現一套原始碼,多個平臺編譯執行。可視為平臺無關的開發環境。

QT原始碼可以被編譯成很多個版本,這裡介紹3個版本:linux桌面版(X11),embeded x86版,embeded arm版。編譯後生成對應平臺庫檔案,使用某平臺的編譯器編譯應用程式時就會連結對應平臺的庫檔案,這樣應用程式就能在該平臺下執行。

1、X11版(預設版本)
X11版本的QT可以在使用X windows系統的linux 桌面作業系統上執行(我用的是Ubuntu),如果不需要開發桌面應用程式,可以不編譯。

2、Embeded x86版
這個版本為什麼是嵌入版(Embeded)的,因為x86桌上型電腦本身也可以當做一個嵌入式系統,但是Embeded x86版的QT不能直接通過X11視窗系統輸出畫面,這時我們可以藉助X11的qvfb工具模擬一個LCD輸出裝置(QWS環境),這樣Embeded x86應用程式就能在Ubuntu裡模擬運行了。要理解這點其實很簡單,以Ubuntu為例,Ubuntu的應用程式是以X11協議(X視窗系統)輸送到螢幕顯示介面的,X server負責圖形顯示,應用程式負責計算、修改資料,兩者基於某種協議通訊。對於嵌入式linux,qt應用程式也需要一個視窗系統才能顯示,但是嵌入式linux系統不能使用X11(太耗資源了),奇趣公司就專門開發了一個qws(QT windows system), 應用程式按照協議向qws傳送資料,服務端負責顯示資料。現在,qvfb就是QWS的顯示裝置。
另外請注意,Embeded x86版的QT應用程式是不能在arm
開發板
上執行的。
embeded x86版並不是我們的開發板最終使用的QT庫,編譯這個版本只是為了方便我們除錯, 先在ubuntu中模擬執行,看看介面,不必下載到開發板的檔案系統中執行,兩者的執行效果除了介面基本相同,其他方面還是有差異的。

3、Embeded arm版
這個版本才是我們在arm開發板上執行的版本。

我們做嵌入式開發,其實只需編譯第3版本的QT(Embeded arm版),編譯X11 版本的目的只是方便我個人學習QT,編譯Embeded x86只是為了體驗模擬效果。

一、編譯X11版:
1、需要libx11-dev  libxext-dev libxtst-dev這3個庫。
sudo apt-get install 
libx11-dev  libxext-dev libxtst-dev

opengl需要
$ sudo apt-get install xlibmesa-gl-dev libglu1-mesa-dev

phonon需要
sudo apt-get install libglib2.0-dev
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev 
sudo apt-get install libphonon-dev libphonon4 phonon-backend-gstreamer 
sudo apt-get install xorg-dev

2、配置configure引數

建立一個qt-4.8.6-x11目錄,最好在使用者空間內,這樣可以避免出現許可權問題。
下載並解壓qt4.8.6原始碼,更改原始碼目錄名為:
qt-src-4.8.6-x11
進入原始碼目錄執行:

./configure -opensource -prefix /home/tom/work/qt/qt-4.8.6-x11 -glib -phonon -no-webkit -no-javascript-jit -no-openssl -no-cups
這裡我不需要webkit和JavaScript、openssl、cups,所以除能這些庫。
3、執行make && make install
(耗時2小時左右)

二、編譯Embeded x86版:
1、配置configure引數
建立一個qt-4.8.6-qvfb目錄,最好在使用者空間內,可以避免出現許可權問題。

再解壓一個qt4.8.6原始碼(解壓比複製快),更改原始碼目錄名為
qt-src-4.8.6-qvfb
進入原始碼目錄,執行:

./configure -opensource -confirm-license -prefix /home/tom/work/qt/qt-4.8.6-qvfb -embedded x86 -qvfb -glib -no-webkit -no-javascript-jit -no-openssl

注意這裡加了x86

2、執行make && make install
(耗時2小時左右)
3、測試qvfb
進入qt-4.8.6-qvfb/example/widget/calcular目錄,測試計算器程式。
首先要開啟qvfb,在終端輸入qvfb -width 800 -height 400 &
執行./calcular -qws,程式正常執行。效果如下:
 

三、編譯ARM版QT
1、配置configure引數
建立一個qt-4.8.6-arm目錄,最好在使用者空間內,可以避免出現許可權問題。

再解壓一個qt4.8.6原始碼,更改原始碼目錄名為
qt-src-4.8.6-arm
在qt-src-4.8.6-arm/mkspec/qws/linux-arm-g++/qmake.conf檔案中定義了交叉編譯器,預設使用arm-linux-gcc,armlinux-g++,我用的是arm-linux-gnueabi,所以分別改成arm-linux-gnueabi-gcc和arm-linux-gnueabi-g++。
進入原始碼目錄,執行:

./configure -opensource -confirm-license -prefix /home/tom/work/qt/qt-4.8.6-arm -embedded arm -xplatform qws/linux-arm-g++ -platform /qws/linux-x86-g++ -little-endian -host-little-endian -shared -no-qt3support -no-phonon -no-phonon-backend -qt-zlib -no-gif -no-libtiff -no-qvfb -qt-libjpeg -no-nis -no-opengl -no-cups -no-webkit -no-glib -no-dbus -no-rpath -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-neon -no-audio-backend -no-svg -no-javascript-jit -no-script -no-scripttools -no-multimedia -no-openssl -nomake tools -nomake examples -nomake demos -nomake docs -nomake translations -lrt

arm版的QT庫很多元件都不需要,所以編譯時間也相對短一些。另外,這裡我們添加了
-xplatform qws/linux-arm-g++ -platform /qws/linux-x86-g++ 
這2個選項,-xplatform表示配置交叉編譯器,-platform表示配置當前平臺的編譯器(對於我的ubuntu就是linux-x86-g++),編譯器名稱可以在原始碼目錄內mkspec內查詢,資料夾名稱就是對應的編譯器。qws/linux-arm-g++ 代表我們的arm開發板是使用qws執行qt程式的,但是注意,qws/linux-arm-g++/qmake.conf裡配置了對應的編譯器名稱,如果和你之前安裝好的交叉編譯器路徑名稱不一樣,那就需要修改。我的交叉編譯器是使用sudo apt-get install gcc-arm-linux-gnueabi安裝的,將qmake.conf裡的編譯器改成arm-linux-gnueabi就可以編譯了。

最後的 -lrt 是加入librt連結庫(在arm-linux-gnueabi/lib目錄下)。沒有這個庫,編譯的時候會提示undefined reference to `clock_gettime錯誤。

2、執行make && make install 

參考資料:
http://wenku.baidu.com/link?url=uAW2u9y82wIfAl6HSfyWHbkQxjsYSEqogOhhBMLZtY-CLJvSOCiQvPvZmch9feULU_KXou57ArHbnBBz2Pb_YtZNxv7kIIgnAQ1ii5VRzXu
http://qt-project.org/doc/qt-4.8/configure-options.html
http://qt-project.org/doc/qt-4.8/install-x11.html
http://qt-project.org/doc/qt-4.8/qt-embedded-install.html
http://qt-project.org/doc/qt-4.8/qt-embedded-crosscompiling.html
http://qt-project.org/doc/qt-4.8/developing-with-qt.html

http://qt-project.org/doc/qt-4.8/qvfb.html

qt 4.8.6的configure help資訊