64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录
最新公司搞一個新項目,需要在Linux下進行UI界面設計。選來選去,最后選擇采用Qt平臺來做,于是要開始研究一下Qt。
Qt作為業內最著名的UI開發工具之一,是一套完整的跨平臺C++圖形用戶界面應用程序開發框架,可以實現一套源碼,多個平臺編譯運行。自從1991年被奇趣公司推出之后,在業內獲得了廣泛的應用,不僅僅被用來UNIX/LINUX平臺下的桌面環境KDE,更有其他諸多極為著名的軟件工具都是采用Qt開發的,比如:Adobe Photoshop Album(就是大名鼎鼎的PS),Autodesk Maya,Google Earth,Opera,Skype,SMPlayer,VirtualBox,WPS Office,極品飛車等等,哈,是不是嚇一大跳?
說到跨平臺,Qt的本事可不是蓋的,不管是windows(x86/x64),linux,MacOS,還是嵌入式arm,全部通吃。換句話說,同一份qt的代碼,可以編譯成上述各個不同的平臺下運行的文件,只需要更換一些配置命令即可。但是,每一種平臺下的開發環境搭建的步驟那肯定是不一樣的。針對嵌入式環境,搭建過程無疑是最復雜也是最麻煩的,下面就是我本人的親測過程全記錄。
第一步、背景介紹
1、Qt版本介紹
首先介紹一下Qt所能生成出來的各個不同版本之間的區別。
根據所應用的目標系統不同,同一份Qt源碼編譯后所生成的版本也是不一樣的。大致來說分為3種:
第一種是在linux系統上編譯完后仍然在linux系統上運行的,稱為x11版本(至于為什么叫x11,這是因為linux系統的應用程序與視窗程序之間是通過X窗口系統的X11協議進行交互,所以稱之為x11系統。具體請自行百度);
第二種是在linux系統上編譯完后轉移到arm平臺上運行的,稱為Embeded arm版本,編譯完后的文件必須燒錄到arm處理器上運行,在PC端無法運行;
第三種稱之為Embeded x11版本,也叫做qvfb版本。這里要解釋一下,如前所述,lixnu的應用程序是以X11協議(X窗口系統)輸送到屏幕顯示界面的,X server負責圖形顯示,應用程序負責計算、修改數據,兩者基于某種協議通信。對于嵌入式linux,qt應用程序同樣也需要一個窗口系統才能顯示,但是嵌入式linux系統不能使用X11(太耗資源了),奇趣公司就專門開發了一個qws(QT windows system), 應用程序按照協議向qws發送數據,服務端負責顯示數據。換句話說,qvfb就是qws的顯示設備。不過要注意的是,embeded x11版并不是我們的開發板最終使用的Qt庫,編譯這個版本只是為了方便我們調試, 先在PC中仿真運行,看看界面,不必下載到開發板的文件系統中運行,兩者的運行效果除了界面基本相同,其他方面還是有差異的。
經過上述分析可以看出,其實,我們做嵌入式開發,只需要涉及到后面2種版本,第一種版本的只有桌面應用程序開發的人才需要使用。而對于后面2個版本,嚴格來說只需編譯Embeded arm版本的程序就好,因為它才是最終在arm平臺上運行的版本。但是,如果只編譯Embeded ARM版本的話,每次編譯完都得下載到開發板上去運行才能看到效果,開發過程太過麻煩,因此我們才需要引入Embeded x11版本,借助于PC端的顯示系統,快速完成界面部分的調試。所以,綜合起來可以這么說,編譯x11 版本的目的是為了方便學習Qt,編譯Embeded x11是為了體驗仿真效果,編譯Embeded ARM版本才是為了完成嵌入式程序開發。
2、開發環境介紹
下面對我所安裝的開發環境、以及所安裝的Qt版本進行介紹,便于對比和查閱。
- 物理機:Windows 10 64位;
- 虛擬器:Virtualbox 5.20;
- 虛擬機:Ubuntu 12.04 64位;
- QtLib版本:qt-everywhere-opensource-src-4.8.6.tar.gz(點此直接下載)
- QtCreator版本:qt-creator-linux-x86_64-opensource-2.5.2.bin(點此直接下載)
這里說明一下我選擇上述Qt版本的原因。我下載的時間是2017年2月底,此時,Qt Library的版本已經更新到了5.8.0,而Qt Creator的版本已經更新到了2.5.2。不過,鑒于網上部分網友的建議,說5.0之后的Qt庫,用的人還比較少,一旦遇到問題,不太好解決,因此建議仍然使用5.0之前的庫。所以,我就選擇了5.0之前的最后一個版本的庫,也就是4.8.6。
3、安裝準備工作
下載完qt的源碼包之后進行解壓。此處要注意的是,根據上述分析,根據運行環境和目標環境的不一樣,Qt分為3個版本,這3個版本的源碼其實是一樣的,只是配置文件不一樣,才會最終導致生成的文件不一樣(這也就是為什么這個源碼的壓縮包叫做qt-everywhere的原因,其本意就是一個源碼包可以通吃所有應用場合)。
所以,你需要根據你自己的需求,將該源碼包解壓出若干份出來(或者解壓出一份然后復制也行,不過實測證明解壓比復制快)。比如,我想要進行嵌入式開發,那就至少要解壓出2份,一份用于編譯Embeded arm版本,另一份用于編譯Embeded x11版本;而如果我同時還想要學習一下桌面x11版本,則還需要再解壓出一份x11版本。所以,我在home目錄下創建了一個臨時目錄qt,然后在qt目錄下再新建了3個目錄用于分別存放各個版本的源碼,各個子目錄命名及其用途如下:
- qt-x11目錄:存放x11桌面版本的源碼;
- qt-qvfb目錄:存放Embeded x11(qvfb)版本的源碼;
- qt-arm目錄:存放Embeded arm版本的源碼;
另外還需要順便說明一下的是,上述步驟只是完成了對3個版本的源碼目錄的區分,當他們編譯完成之后安裝到系統中去時,同理,也要進行目錄上的區分,否則會混亂不堪。屆時,我們將通過命令行參數來進行指定,后面會詳細介紹,此處只做鋪墊介紹。
準備工作的最后一步,就是安裝一下qt所依賴的一些系統庫,執行如下命令即可:
sudo apt-get install g++ sudo apt-get install libx11-dev libxext-dev libxtst-dev sudo apt-get install xlibmesa-gl-dev libglu1-mesa-dev最后一條命令是用于安裝OpenGL的依賴庫,如果你用不到OpenGL,則不用安裝。
第二步、安裝Qt庫
1、安裝x11版本的Qt
進入qt-x11目錄,按順序執行以下命令即可:
./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-x11-4.8.6 make sudo make install需要說明的是,make命令耗時較長,以我i3-4160處理器、8G內存的配置,大約半個多小時。執行完畢后,Qt就會自動安裝到/usr/local/Trolltech/Qt-x11-4.8.6目錄下。
2、安裝qvfb版本的Qt
進入qt-qvfb目錄,按順序執行以下命令即可:
./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-qvfb-4.8.6 -embedded x86 -xplatform qws/linux-x86_64-g++ -qvfb make sudo make install這里要說明的是,此處的config配置參數是本人實測OK的,網上很多教程里貼的參數,大多不能用。其中特別要注意“-xplatform qws/linux-x86_64-g++”字段,因為我本人的Ubuntu系統是64位的,所以將平臺參數配置成linux-x86_64的。
3、安裝arm版本的Qt
進入qt-arm目錄,按順序執行以下命令即可:
./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-arm-4.8.6 -embedded arm -xplatform qws/linux-arm-g++ make sudo make install4、安裝qvfb
重新進入qt-x11目錄,按順序執行以下命令:
cd tools/qvfb makemake完后,會在qt-x11/bin目錄下生成一個qvfb的可執行文件。將該文件拷貝到 /usr/local/Trolltech/Qt-x11-4.8.6/bin目錄。
要特別說明的是,這里的qvfb必須是在qt-x11目錄下編譯,而不是在qt-qvfb目錄下編譯。網上有不少人沒寫清楚,害我一開始以為是在qt-qvfb目錄下編譯,弄了半天才發現目錄搞錯了!
OK,至此已經完成了3個版本的Qt源碼的編譯和生成,并在/usr/local/Trolltech/目錄下已經生成了相應的文件。
leon@Ubuntu:~$ ll /usr/local/Trolltech/總用量 20 drwxr-xr-x 5 root root 4096 2月 28 13:35 ./ drwxr-xr-x 11 root root 4096 2月 27 20:09 ../ drwxr-xr-x 11 root root 4096 2月 28 13:35 Qt-arm-4.8.6/ drwxr-xr-x 13 root root 4096 2月 28 10:42 Qt-qvfb-4.8.6/ drwxr-xr-x 13 root root 4096 2月 27 20:11 Qt-x11-4.8.6/5、修改環境變量
對于上述步驟4所生成的qvfb,不少同學可能會想立即啟動起來看看。但是,在命令行輸入qvfb時,系統會提示找不到該文件。這是因為尚未將該目錄加入環境變量的原因。因此,下面我們要將該目錄加入到環境變量中去,便于后續的引用和執行。
sudo vi /etc/profile在文件的末端加入下面的語句:
export QTDIR=/usr/local/Trolltech/Qt-x11-4.8.6 export PATH=$QTDIR/bin:$PATH export MANPATH=$QTDIR/man:$MANPATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH保存,退出即可。之后,在任意位置輸入qvfb都可以啟動該程序了,也可以通過命令指定qvfb的界面尺寸:
qvfb -width 800 -height 400啟動之后的界面如下所示:
6、自定義配置參數
大家注意到了,執行上述步驟1-3時,基本步驟都是一樣的,唯一的差別就是在config命令所攜帶的參數上面,用簡單的命令來控制和生成不同的目標,這就是qt的奧妙所在。
當然,為了簡單起見,上面我所列舉的配置參數,僅僅是一些最最基本的參數,qt還支持非常多的自定義參數(可以通過./configure -help命令來查看)。大家如果有興趣,可以自己去研究。不過,該命令內容較多,需要翻頁查看,不太方便,因此建議大家通過下述命令將config命令的幫助文件導出到configcmd文件中慢慢分析。
./configure -help > configcmd需要說明的是,貌似qt-4.8.6版本的help文件內容有所缺失,并未包含qt所支持的全部配置參數。這一點,網上也有人指出了,并列出了qt-4.8.6版本的help文件與qt-4.5.3版本的help文件進行對比。有興趣的同學可以自己去研究一下。
7、驗證可用
經過上面一番倒騰,總算是把嵌入式開發所需要的各個版本的Qt全部安裝完畢了。那么,究竟是否安裝成功了呢?我們需要進行一下驗證。很簡單,Qt庫自己有相應的示例,僅需簡單調用一下便可。
qvfb -width 800 -height 400 cd /usr/local/Trolltech/Qt-qvfb-4.8.6/examples/widgets/calculator/ ./calcular -qws便可完成示例代碼的啟動運行。運行的效果如下:
搞定!
第三步、安裝QtCreator
經過上述各個步驟,基本完成了Qt編譯庫和編譯工具的安裝。至此為止,確實是可以進行Qt的開發了。但是,如果要進行實際的界面設計和集成,還缺少一個步驟,那就是集成開發環境的安裝,即QtCreator。QtCreator是Qt自帶的集成開發環境(類似于ARM的ADS/Keil/IAR,或者windows的VS等),它的設計目標是使開發人員能夠利用Qt這個應用程序框架更加快速及輕易的完成開發任務。
相比Qt Library,QtCreator的安裝要簡單的多,我們下載的bin文件是可執行文件,安裝時會出現像在Windows下的界面,安裝路徑默認就可以了。使用終端cd到你剛剛存放QtCreator的臨時目錄,修改bin文件的權限使其具有可執行的權限:
chmod a+x qt-creator-linux-x86_64-opensource-2.5.2.bin然后輸入以下命令安裝bin文件:
./qt-creator-linux-x86_64-opensource-2.5.2.bin就會出現仿windows系統的安裝界面。如下圖所示,一步步按照要求確認就可以完成安裝流程了。
等待操作完成即可,如下圖所示。
第四步、配置QtCreator
QtCreator安裝完畢之后,啟動便可直接使用。但是有一個問題,它并不知道你的系統中安裝了哪些Qt庫,也不知道你將這些庫安裝在什么位置。因此,當你第一次啟動QtCreator時,必須對其進行配置。
點擊’工具’-‘選項’,彈出配置界面。在其中選擇’構建和運行’頁面,在’QT版本’標簽下,分別配置你所安裝的各個Qt庫的相關信息。
首先配置Qt版本路徑信息。如下圖所示,分別配置好qt-x11、qt-qvfb、qt-arm這3個庫的路徑信息(即各個庫中的qmake文件所在的路徑信息)。
然后配置工具鏈的路徑。因為Qt只能自動識別出x86平臺下的gcc編譯器所在路徑,arm-linux-gcc的路徑無法自動識別,需要手工去指定。如下圖所示:
至此,基本完成了QtCreator運行所必須的各項參數的配置,可以開始新建工程進行實際操作了,如下圖所示。
步驟1、新建工程
步驟2、輸入工程名
步驟3、設置目標
步驟4、設置類信息
*步驟5、項目管理
步驟6、工程視圖
第四步、編譯和運行
完成代碼的編碼工作之后,點擊左下角的’構建目標選擇器’,可以自由選擇你需要構建的項目目標,包括x11目標、qvfb目標、以及arm目標。如下圖所示:
要注意的是:
- 如果選擇的是桌面版本的Qt-x11目標,那么可以在編譯完后直接點擊運行按鈕進行運行。
- 如果選擇的是桌面版本的Qt-qvfb目標,那么編譯完后是無法直接運行的,會提示”QWSSocket::connectToLocalFile could not connect:: 拒絕連接”。這是因為,該目標是基于qvfb來構建的,無法基于x11桌面系統來顯示。必須先將qvfb運行起來,然后在終端命令行中輸入’qvfb -width 800 -height 400’,然后進入該目標所在目錄,輸入’./test -qws’,程序方可正常運行,同時會給出’Connected to VFB server :0: 800 x 400 x 32 282x141mm (72x72dpi)’的提示。
- 如果選擇的是嵌入式版本的Qt-arm目標,那么編譯完后必須下載到arm目標版上才能運行,在PC端是無法運行的。
基于x11環境的程序運行情況截圖
基于qvfb環境的程序運行情況截圖
至此,嵌入式Qt開發的安裝和搭建工作基本完成,剩下的問題以后再慢慢摸索吧。
搞定,收工!
總結
以上是生活随笔為你收集整理的64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米9发布地点是哪(小米官方售后服务)
- 下一篇: 右键没有Word.Excel.PPT怎么