QT:Ubuntu下 嵌入式Qt開發環境的搭建


轉自:http://blog.csdn.net/lpp0900320123/article/details/24876159

一、qt的版本介紹

    按照不同的圖形界面來劃分,分爲四個版本:

Win32版:適用於windows平臺;

X11版:適用於各種X系統的Linux和Unix平臺;

Mac版:適用於蘋果的MacOS;

Embedded版:適用於具有幀緩衝(Frame buffer)的linux平臺;

      Qtopia是基於qt開發的一個軟件平臺,Qtopia是構建於Qt/E之上的一系列應用程序,在這個平臺上我們可以開發各種應用程序2008年,TrollTech公司被Nokia收購後,Qtopia被重新命名爲Qt Extended。 Nokia在推出了Qt Extended的最新版Qt Extended 4.4.3之後的2009年3月3日,決定停止Qt Extended的後續開發,轉而全心投入Qt的產品開發,並逐步會將一部分Qt Extended 的功能移植到Qt的開發框架中。

所以總的來說,QT也就三種:面向桌面的x11、面向嵌入式的Qt/E、以及面向嵌入式帶各種應用程序的Qtopia桌面系統!!!

比如是Qt的各種版本介紹:

1.qt的安裝程序(包含了QtCreatorQtAssistant

 

    Windows--x86--msvc2012_64_opengl :表示window平臺,msvc2012可以與VS2012進行結合使用,64位應用程序,要求電腦裝的是64位操作系統;opengl表示支持openGL的繪圖模式

Windows--x86--mingw48_opengl window平臺下的mingw48編譯器進行編譯。

2.Qt的庫的源碼包

    可以根據需要下載源碼包:

 

3.Qt 安裝包的下載

    下載網址:http://qt-project.org/downloads

如果想下載Qt的以前版本,可以在上面網址的最下面的一欄有個Archive for old versions ,進去就可以下載qt的以前版本了。

 

二、嵌入式Qt開發環境的搭建

1.預備知識

     嵌入式qt開發環境的安裝方法很多,qt的版本也很多。有點讓人不知所措,不知該按哪種方法去安裝。剛開始總不知其幾個版本之間的關係。現在也只知道其大概的一個關係,下面理清一下:據我所知的qt版本有:

    1 t-x11-opensource-src-4.3.2.tar.gz  

    2 qt-embedded-linux-opensource-src-4.4.0-rc1.tar.bz2 

    3 、qt-everywhere-opensource-src-4.8. 5.tar.gz

    4 、QtSdk-offline-linux-x86-v1.2.1.run

    5 、qt-creator-linux-x86-opensource-2.5.0.bin

    這些版本真有些讓人眼花繚亂。後經過一番的研究和請教,終於對這幾個版本之間的關係有點眉目了。

首先網上有人說安裝 12,就可以了,因爲1可以提供Qt designer 和qvbf,然後2可以提供嵌入式編譯庫,兩者安裝後就可以搭建一個嵌入式qt開發環境了,其實沒錯,不過已經過時了,因爲現在有了Qt creatorQt creator 就包含了 Qt designerqvbf,因此我們僅僅安裝5的版本就可以替代1的安裝。不過2也還是要安裝,不過了,像2那種版本的編譯庫現在已經有了更加齊全的庫替代,那就是3了。而4就是5的升級版了,它不僅可以包含5擁有的所有東西,而且能開發嵌入式應用程序,不過暫時還沒測試。

 

    構建Qt/Embeded的交叉編譯環境需要3個Qt開發環境:

  Qt的桌面開發環境:在linux中全安裝qt,用它編譯好的程序後,可以直接用“./”運行。

  Qt/Embeded(x86)環境:在宿主機平臺模擬編譯和調試目標機程序的環境,帶有qvfb功能,在PC機上可以模擬應用程序在arm開發板上的運行情況。用此編譯好的程序,只用“./”命令不可以運行,必須加上參數 -qvfb -qws

  Qt/Embeded(ARM)交叉編譯環境:編譯好的程序,用於在arm平臺上運行。  

首先要準備好交叉編譯所需要的軟件包:

(1)arm-linux-gcc-4.4.3-20100728.tar.gz(交叉編譯環境)

(2)qt-everywhere-opensource-src-4.8.5.tar.gz(Qt的源碼)

(3)qt-creator-linux-x86_64-opensource-2.5.2.bin(我的系統是64位,所以選擇x86_64)

(4)tslib-1.4.tar.gz(觸摸屏校驗工具)

其中(2)和(3)在http://download.qt-project.org/archive/ 進行下載。

 

2.環境的搭建

2.1  系統環境

主機操作系統:ubuntu10.04

主機編譯器:gcc4.4.3,

交叉編譯器:arm-linux-gcc-4.3.3

2.2 安裝交叉編譯器

 (1)首先以root用戶登入
 (2)複製arm-linux-gcc-4.3.2.tgz到根目錄下tmp文件夾裏
 (3)解壓命令tar xvzf arm-linux-gcc-4.3.2 -C /
 注意以上命令必須要有-C而且是大寫的後邊有個空格也要注意

 (4)配置下編譯環境路徑 在控制檯下輸入 gedit /root/.bashrc 等一會出來文本編輯器後在文件最後(最後一行)加上 下面代碼
 
export PATH=/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH

重新打開一個終端,使上面的配置文件生效;輸入命令 arm-linux-gcc  -v;  如果出現下面界面,就代表交叉編譯器安裝成功,會輸出gcc的版本號(根據自己的交叉編譯器配置就行了,並不一定是arm-linux-gcc,例如我的hi3531的交叉編譯器是arm-hisiv200-linux-gcc 只要打出arm- 按tab鍵就可以看到了);

 

2.3 安裝觸摸屏校驗工具(我自己沒有安裝,因爲暫時沒有觸摸屏)

把tslib-1.4.tar.gz放到一個目錄下,比如/opt目錄下。接着執行命令如下:

       #tar zxvf tslib-1.4.tar.gz 

執行命令cd tslib,進入tslib當前目錄,接着執行命令如下:

       #./autogen.sh 

然後接着執行配置命令:

       #./configure     --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes 

最後執行編譯命令和安裝命令如下:

      1.        make  

      2.        make install 

如果以上步驟沒錯,則可以在/usr/local/tslib下出現我們需要的庫文件,這些庫文件我們移植時會用到。

編譯期間出現的錯誤:./autogen.sh: 4: autoreconf: not found

解決辦法:sudo apt-get install autoconf automake libtool

2.4 安裝QtCreator

qt-creator-linux-x86_64-opensource-2.5.2.bin (我自己安裝的是qt-creator-linux-x86-opensource-2.4.1.bin)拷貝到linux系統中,在終端中把路徑切換到qt-creator-linux-x86_64-opensource-2.5.2.bin所在的路徑,運行命令:./qt-creator-linux-x86_64-opensource-2.5.2.bin  就會出現圖形安裝界面;下面的安裝步驟就和我們在windows下安裝軟件差不多。

注意:下的版本要和你的操作系統相匹配,32位的系統下對應32位的應用程序;

2.5 編譯Qt庫源碼

2.5.1 解壓

    將源碼qt-everywhere-opensource-src-4.8.5.tar.gz (我使用的是qt-everywhere-opensource-src-4.8.6.tar.gz)進行解壓,並複製三份到/usr/local目錄下,並分別命名爲qt-pc,qt-x86,qt-arm。

 

2.5.2 編譯PC版

進入qt-pc目錄,執行如下操作:

#./configure

# make

# make install

編譯過程中出現的問題:

出錯:Basic XLibfunctionality test failed!

這個錯誤主要是因爲,XLib庫沒有安裝,所以在編譯X11平臺時,應該保證,以下命令正確執行:sudo apt-get install libx11-dev  libxext-dev libxtst-dev

注意:可以使用 make confclean 命令 把以前的配置信息清除掉,然後再重新配置。

出錯:但當使用./configure編譯時出現The specified system/compiler is not supported:

xxx/xxx/。。。。。。的提示,按照字面意思是系統或者編譯工具不支持,終端輸入export,終於明白是哪裏出錯了:

      QMAKESPEC=/xxx/xxxx/xxx/xxx這個環境變量指定的目錄根本就不是我的qt源碼所在的目錄,就重新設一下該環境變量:
export QMAKESPEC=/root/qt-everywhere-opensource-src-4.7.4/mkspecs/linux-g++

重新./configure  指定目錄,OK!


2.5.3 編譯x86版(我沒有編譯)

進入qt-x86目錄,執行如下操作:

# ./configure  -embedded x86    -qt-gfx-qvfb    -qt-kbd-qvfb   -qt-mouse-qvfb

# make

# make install

安裝過程比較長,沒有碰到過錯誤。

編譯安裝PC版中的 qvfb:

進入qt-pc/tools/qvfb/目錄,執行如下操作:

#make

編譯完畢,將qt-pc/bin目錄下的qvfb文件複製到/usr/local/Trolltech/QtEmbedded-4.8.5/bin目錄。

編譯qvfb時,出現瞭如下錯誤:

x11keyfaker.cpp:48:34: 致命錯誤: X11/extensions/XTest.h:沒有那個文件或目錄

編譯中斷。make: *** [.obj/release-shared/x11keyfaker.o] 錯誤 1

 

解決方法:

        sudo apt-get install xorg-dev

 

如果makefile中沒有-lXtst選項,則修改makefile 中 LIBS 選項: 添加 -lXtst選項

 

2.5.4 編譯ARM版

  編繹源碼
      2.5.4.1 指定編繹器類型
      #cd qt-embedded-linux-opensource-src-4.8.6
      #vim mkspecs/qws/linux-arm-g++/qmake.conf
      把所有的arm-linux-**改爲arm-hisiv200-linux-**如下所示

#
# qmake configuration for building with arm-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = arm-hisiv200-linux-gcc
QMAKE_CXX               = arm-hisiv200-linux-g++
QMAKE_LINK              = arm-hisiv200-linux-g++
QMAKE_LINK_SHLIB        = arm-hisiv200-linux-g++

# modifications to linux.conf
QMAKE_AR                = arm-hisiv200-linux-ar cqs
QMAKE_OBJCOPY           = arm-hisiv200-linux-objcopy
QMAKE_STRIP             = arm-hisiv200-linux-strip

load(qt_config)
      2.5.4.2指定編繹時不編繹瀏覽器, 屏蔽webkit和browser,
      vim examples/examples.pro,屏蔽以下行(行首添加#)
      contains(QT_CONFIG, webkit): SUBDIRS += webkit

      vim demos/demos.pro,屏蔽以下兩行(行首添加#)
      contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):SUBDIRS += demos_browser
      demos_browser.subdir = browser

必須加上“-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm ”參數, 不然安裝後不在QtEmbedded-4.8.5-arm文件夾下,而是覆蓋了QtEmbedded-4.8.5。

新建myconfig文件,編輯如下(自己使用的是直接輸出命令參數沒有編輯文件,命令如下./configure -prefix  /usr/local/Trolltech/QtEmbedded-4.8.6-arm -opensource -no-qt3support -no-xmlpatterns -no-multimedia -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -xplatform qws/linux-arm-g++ -no-openssl -nomake examples -nomake demos -embedded arm -little-endian -no-opengl):

#!/bin/sh

./configure \

-prefix  /usr/local/Trolltech/QtEmbedded-4.6.3-arm \ 

-opensource \

-confirm-license \

-release -shared \

-embedded arm \

-xplatform qws/linux-arm-g++ \

-depths 16,18,24 \

-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
注:
-prefix  /usr/local/Trolltech/QtEmbedded-4.6.3-arm<span style="font-size:18px;"> </span><span style="font-size:18px;"> 指定qt的庫文件,
-xplatform qws/linux-arm-g++: 表示使用arm-linux交叉編譯器進行編譯;
-embedded arm: 表示將編譯針對arm平臺的embedded版本;
<span style="font-family:黑體;">可以執行./configure --help查看參數的詳細說明,根據需要來配置合適的參數
提高編譯速度:
    使用選項-nomake examples –nomake demos –nomaketools過濾掉例子、演示和工具目錄,他們不進行編譯。
</span></span>

如果放棄配置,則使用命令:# make confclean

編譯:# make

安裝:# make install

最終會在/usr/local/Trolltech/QtEmbedded-4.8.6-arm下看到如下目錄。
       bin demos examples include lib mkspecs plugins

 

安裝完成後,在/usr/local/Trolltech目錄中有三個文件夾:Qt-4.8.5、QtEmbedded-4.8.5、QtEmbedded-4.8.5-arm。

 

2.6 安裝完後

2.6.1 qvfb的測試

 

運行qvfb,提示瞭如下錯誤,在網上也查了很多種解決辦法,最後還是沒有解決; 有的說要重新編譯內核,並帶上參數;覺得比較麻煩,就沒有去嘗試;不過這個錯誤並不影響我們仿真模擬Qt4程序。

2.6.2 QtCreator編譯前的配置

   X86的調試編譯與調試

1)打開QtCreator ,工具---->選項--->構建和運行 進行設置,在Qt版本菜單下,手動設置選擇qmake路徑。

 

2)打開QtCreator 對其進行設置,點擊左邊的項目,選擇運行,對其進行設置,在參數裏添加 -qws參數

 

(3)編譯與運行

現在終端 輸入命令:qvfb -width 800 -height 480 &    打開虛擬緩衝端;

然後就可以在QtCreator對程序進行編譯、運行了;

 

 

運行結果如下:

 

 

 由於自己沒有ARM版,現在移植的那部分還沒有做,等以後自己做的話,自己會貼上去的。

3 移植Qt到開發板

3.1 移植需要的文件

      開發板上要使用的東西就2個,一個是編譯後的tslib(我沒有編譯),一個是編譯後qt目錄下的lib目錄。如下步驟將這兩個目錄拷貝到開發板上。

3.2 開發板環境變量設置

     網上的環境變量設置如下:

<pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp">export QTDIR=/mnt/usr/qt/hismall
<pre name="code" class="cpp">        export PATH=$QTDIR/bin:$PATH
        export TSLIB_CONSOLEDEVICE=none
        export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
<span style="font-family:黑體;">設置的是PATH是/mnt/usr/qt/hismall
設置的LD_LIBRARY_PATH是/mnt/usr/qt/hismall/lib
根據自己的實際情況進行設置就可以了。</span>





我是將程序和鏈接庫放在一個文件夾下了,編寫了一個腳本run.sh

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=.
export QWS_DISPLAY="linuxFB:/dev/fb4"

也就是說明lib在.目錄下(當前目錄下)字體文件也在當前目錄下。

然後運行命令

source run.sh
設置一下環境變量就可以了。根據自己的需要可以將腳本寫入開機加載的腳本中。

注:什麼是QWS Client和QWS Server?
       QT Embedded也是一種C/S結構,需要有一個QT application做QWS Server,程序啓動時帶有-qws參數的就是QWS Server,不帶這個參數就是QWS Client。
       因此任何一個基於QT的application都可以做QWS Server。當然QWS Server一定先於QWS Client啓動,否則QWS Client將啓動失敗。在實際應用中,
       會指定某個特殊的application做QWS Server,這個application一般還會管理一些其它的系統資源。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章