導語:
目前啓揚智能默認提供的Qt版本是4.8,但是現在已經發展到最新的5.9版本。當現有版本的Qt庫不能滿足實際開發需求時,則需要進行Qt移植。本文就來介紹下如何將Qt5.9.5移植到ARM開發板上。
以啓揚imx6開發板爲例,使用Ubuntu14.04虛擬機作爲移植環境。
下面跟着我左手右手一個慢動作,開始吧!
一、準備工作
1、主機環境:Ubuntu14.04;
開發板:啓揚IAC-IMX6-kit;
(如果使用的是Ubuntu12.04,需要將gcc升級到4.8以上)
2、官網下載源碼包
下載qt-everywhere-opensource-src-5.9.5.tar.xz,這裏選擇下載的是xz格式的源碼包,而不是將源碼和qtcreator打包好的run文件。因爲試過run文件,一方面文件太大,另一方面安裝得到的源碼包和xz格式的有一些不同,比如找不到qt base,影響到後續的配置,所以最好選擇xz格式。
3、解壓
tar -zxvf qt-everywhere-opensource-src-5.9.5.tar.xz
4、配置交叉編譯器的路徑
因爲Qt5.9.5支持C++11,所以編譯器版本需要高於4.8以上,我採用了4.8.3版本編譯器。
修改~/.bashrc 文件,在系統環境變量PATH中添加交叉編譯器的路徑。(路徑以實際路徑爲準)
export PATH=/home/ubuntu1404/work/arm-2014.05/bin:$PATH
執行命令source ~/.bashrc
查看交叉編譯器的路徑是否已經添加到系統環境變量PATH中。
可以查看交叉編譯器的版本號:
arm-none-linux-gnueabi-gcc-v
如果能夠正常顯示出交叉編譯器的版本號,恭喜你,第一步已經成功了!
二、Qt5.9.5的交叉編譯
- 指定目標平臺的架構和交叉編譯器的類型
Qt5中針對不同的目標平臺都有相應的配置文件夾,只需修改對應目標平臺文件夾中的配置文件qmake.conf。
cd qt-everywhere-opensource-src-5.9.5
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
下面是修改後的qmake.conf,其中的內容需要根據自己的實際情況去修改。
這裏修改了兩個地方,一是定義了arm的架構,其中:QT_QPA_PLATFORM是指定QPA平臺的插件,這裏選擇的是linuxfb,參數-O是編譯器提供的優化選項,如-O、-O1、-O2、-O3等,代表不同的優化級別,參數-march後面指定的是目標處理器的架構(可能指定不同的架構會調用不同的指令集,猜的~);另外一個改動的地方就是將下面g++.conf和linux.conf中的參數值中加上了fsl,如arm-none-linux-gnueabi-gcc,這是我選擇的交叉編譯器,可以根據自身的情況修改。
2、根據需求配置Qt
配置Qt可以通過源碼包中configure腳本來完成,運行configure腳本後會得到makefile文件,然後通過make和make install命令完成編譯和安裝。這裏我編寫了一個腳本來實現配置的步驟。
從shell腳本中可以看到,參數-prefix指定了文件的安裝路徑,我的安裝路徑是/opt/newQt5.9.5_arm/newQt5.9.5_arm_install,參數-xplatform指定了目標平臺爲linux-arm-gnueabi-g++。執行這個腳本後就會得到makefile文件,下一步就可以進行編譯了。
3. 編譯和安裝
終於可以編譯了,執行make&&make install命令,然後開始漫長的編譯過程,整個過程持續大概2個小時。
移植所需的文件到ARM中
將編譯安裝得到的lib、plugins拷貝到開發板中,lib中存放的是QT程序運行所需的動態庫文件,plugins中存放的應該是所需的插件。由於U盤掛載比較麻煩,這裏選擇使用scp命令,通過網絡傳輸。
配置開發板環境並運行程序
修改/etc/QtEnv文件,設置開發板的環境變量,文件末尾添加的內容如下:
export LD_LIBRARY_PATH=/opt/Qt5.9.5_arm_install/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt5.9.5_arm_install/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=/opt/Qt5.9.5_arm_install/lib/fonts
4. 編譯輸入法程序
將QtSoftKeyboard2018-03-03.zip拷貝到目錄下解壓
添加qmake到環境變量
export QTEDIR=/opt/newQt5.9.5_arm/newQt5.9.5_arm_install:$QTEDIR
export PATH=/opt/newQt5.9.5_arm/newQt5.9.5_arm_install/bin:$PATH
export LD_LIBRARY_PATH=/opt/newQt5.9.5_arm/newQt5.9.5_arm_install/lib: LD_LIBRARY_PATH
生成Makefile和編譯
#qmake
#make
報錯
修改PinYinFenCi.cpp文件的42行、88行、117行將toAscii()函數修改爲toLatin1()
將/bin/目錄下的InputTool和/db/目錄下的pinyin.db拷貝到開發板同一個目錄下
運行InputTool
報錯
將/home/ubuntu1404/work/arm-2014.05/arm-none-linux-gnueabi/libc/lib/下的所有文件拷貝
到開發板的/lib/目錄下
Qt界面不顯示中文
將FZYTK.TTF文件拷貝到/opt/Qt5.9.5_arm_install/lib/fonts下沒有fonts需創建
警告
解決方法
移植libiconv-1.14
./configure -prefix=$PWD/install -host=arm-none-linux-gnueabi
Make &&make install
將安裝目錄下lib目錄下的preloadable_libiconv.so拷貝到開發板/system/lib目錄下
添加環境變量export LD_PRELOAD=/system/lib/preloadable_libiconv.so
至此,Qt移植就已經大功告成了!
你以爲我們提供教程就這些?當然不是了,Qt Creator的安裝配置運行過程繼續瞭解下!
一、安裝Qt creator
注意點:截圖中的紅色方框內容表示必須點擊或者填寫。
將qt-creator-opensource-linux-x86_64-4.3.1.run拷貝到Ubuntu中,運行qt-creator-opensource-linux-x86_64-4.3.1.run。
出現以下界面,點擊Next:
出現以下界面,點擊skip:
出現以下界面,點擊Next:
出現以下界面,選擇安裝路徑,以下是我的安裝路徑,然後點擊Next:
出現以下界面,點擊Next:
出現以下界面,點擊接受協議,然後點擊Next:
出現以下界面,點擊install:
出現以下界面,等待1分鐘左右:
出現以下界面,點擊finish:
出現以下界面,表示安裝成功:
備註:Qt Creator可運行文件在: <安裝目錄>/bin/qtcreator
二、配置Qt Creator
點擊Tools->Options:
點擊Build & Run 然後點擊Compilers:
點擊Add->GCC->C:
Compiler path 填寫:
/home/ubuntu1404/work/arm-2014.05/bin/arm-none-linux-gnueabi-gcc
然後點擊Apply:
點擊Add->GCC->C++:
Compiler path 填寫:
/home/ubuntu1404/work/arm-2014.05/bin/arm-none-linux-gnueabi-g++
然後點擊Apply:
點擊Qt Versions ,然後點擊Add:
選擇如下圖路徑的qmake,然後點擊Apply:
點擊Debuggers,然後點擊Add:
Name填寫:qt5.9.5-imx6
Path 填寫:
/home/ubuntu1404/work/arm-2014.05/bin/arm-none-linux-gnueabi-gdb
然後點擊Apply
點擊Kits,然後點擊Add:
Name填寫:qt5.9.5-imx6
Sysroot填寫:/home/ubuntu1404/work/arm-2014.05/bin
Compiler C 選擇GCC
Compiler C++ 選擇GCC
Debuggers 選擇qt5.9.5-imx6
Qt version 選擇Qt 5.9.5(qt5)
最後點擊OK。
配置好後,關閉Qt creator。
在終端運行:<安裝目錄>/bin/qtcreator.sh
點擊New Project
點擊Application,然後點擊Qt Widgets Application,然後點擊Choose:
Name 填寫: qt-test
Create ir 填寫:/home/ubuntu1404 (備註:我的路徑)
選擇qt5.9.5-imx6,然後點擊Next:
出現以下界面,點擊Next:
出現以下界面,點擊Finish:
出現以下界面,點擊Forms,然後雙擊mainwindow.ui:
將左邊的Push Buttor 拖拽到右邊的窗口布局上:
右擊窗口布局的PushButton,選擇Go to slot :
出現以下界面,點擊clicked(),然後點擊OK :
在下圖的mainwindow.cpp中添加頭文件:注意頭文件換成英文雙引號
#include <QMessageBox>
#include <qdebug.h>
在void MainWindow::on_pushButton_clicked() 函數中添加:
QMessage Boxmessage(QMessageBOX::Warning,"Information”,“Really to clear
data?",QMessageBox::Yes|QMessageBox::No,NULL);
if (message.exec()==QMessageBox::Yes)
{
qDebug()<<"clicked yes\n";
}
else
{
qDebug()<<"clicked no\n";
}
點擊File,然後點擊Save All:
點擊左下角的Run 綠色三角形按鈕,等待十秒左右後,右下角出現綠色橫條,表示IMX6 可執行的Qt程序成功生成。
然後就可以嘗試運行準備好的Qt程序了,Qt5中是不用加-qws參數的
Tips:Qt5中不再用到Qt4中的窗口系統qws++,而是使用QPA系統,二者之間的差異還不清楚,但是程序運行時不需要再加上參數-qws了。而這個特性也導致Qt5與Qt4的移植過程有一些區別,這裏記錄一下。
瞭解Qt5.9
赫爾辛基,2017年6月5日——Qt公司發佈了其跨平臺軟件開發框架Qt的最新版本Qt 5.9。該開發框架能夠幫助企業爲自己的產品帶來高超的用戶體驗,滿足用戶的需求。Qt5.9 得益於C++ 11的強大,帶來了前所未有的性能及穩定性,並且爲您提供長期支持(LTS)。目前,全球數百萬的開發者都在使用Qt技術,包括財富五百強企業前十名中的八位。
根據Gartner最近發佈的預測,2017年全球使用物聯網的設備達到84億件,比2016年增長31%,並且在2020年有望達到204億件。物聯網已經成爲了全球技術發展方向中市場機會最廣闊的領域。因此,企業及獨立開發者們急切盼望能夠通過方便快捷地創建應用及設備,滿足當前及未來物聯網行業的需求。在Qt 5.9的支持下,企業及獨立開發者們能夠獲得這一跨平臺開發框架的強力支持,爲任何操作系統和設備開發提供功能強大且靈活的軟件。
Qt公司CTO Lars Knoll表示:“在今天這個萬物互聯、移動爲先的社會裏,客戶的期望值呈指數級增長,幾年前的企業完全無法預測今天的需求。因此,開發者們創造的應用及設備必須滿足甚至超越客戶的期望,以獲得高超的用戶體驗。爲滿足這一需求,開發者們使用的開發框架也必須足夠先進、靈活。Qt 5.9給開發者們提供了他們所需的性能及穩定性,幫助他們在今天高度競爭、應用驅動的經濟環境中脫穎而出。”
正如Qt的全部應用開發及設備開發工具一樣,Qt 5.9所包含的新功能與高性能均以加速軟件及設備開發爲目的,涵蓋大量行業,包括醫療健康、汽車製造、飛機制造、製造業、家電以及娛樂產品等。
附上Qt移植相關資料:鏈接: https://pan.baidu.com/s/1PJq-h-rCfqVh5h8ARqnYUg 密碼: bfsu