1、准備交叉編譯環境
環境說明:Windows 7 64位
此過程需要:
(1)Qt庫開源代碼,我使用的是5.7.0版本;
(2)Perl語言環境5.12版本以上;
(3)Python語言環境 2.7 版本以上;
(4)Windows平台上的MinGW開發工具集(內含本地編譯器gcc、g++ 4.9以上版本,支持c++11);
(5)Windows平台上的交叉編譯器arm-linux-gnueabihf(gcc、g++4.9以上版本,支持c++11)。
1.1、下載Qt庫源代碼
到Qt官網官網https://www.qt.io/download-open-source/#section-2下載qt-everywhere-opensource-src-5.7.0.zip或者qt-everywhere-opensource-src-5.7.0.tar.gz。
1.2、安裝Perl
到Perl官網https://www.perl.org/get.html下載ActivePerl 5.12以上版本,如ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe。安裝完成后將安裝目錄里的bin目錄路徑添加到windows環境變量的PATH中。
1.3、安裝Python
到Python官網 https://www.python.org/downloads/下載Python2.7以上版本,如python-3.5.2.exe。安裝完成后將安裝目錄里的bin目錄路徑添加到windows環境變量的PATH中。
1.4、MinGW開發工具集
MinGW工具集內含編譯器工具gcc、g++等,需要此工具集來編譯Qt的qmake等開發工具,因為qmake這些開發工具是在本地windows上運行的。要求4.9以上版本的gcc、g++,4.8以上就已經支持c++11。
32位系統可以到https://sourceforge.net/projects/mingw/下載mingw-get-setup.exe后進行在線安裝;64位系統到https://sourceforge.net/projects/mingw-w64/下載mingw-w64-install.exe后進行在線安裝。安裝完成后將其bin目錄添加到環境變量PATH中。
1.5、安裝交叉編譯器
之前使用的Codesourcery公司的交叉編譯器版本較低(arm-2014.05-29-arm-none-linux-gnueabi.exe,arm-none-linux-gnueabi,gcc 4.8.3),支持c++11不完全,而且編譯好的程序需要聯帶幾個基礎的依賴庫一起打包,麻煩了點。
現使用linaro公司的交叉編譯器,可到http://releases.linaro.org/14.07/components/toolchain/binaries/下載gcc-linaro-arm-linux-gnueabihf-4.9-2014.07-20140726_win32.exe,安裝完成后,將其bin目錄添加到環境變量PATH中。arm-linux-gnueabihf工具編譯后的程序不需要聯帶依賴庫一起打包。
2、交叉編譯Qt庫
2.1、編譯前的處理
解壓Qt源碼到本地。用文本方式打開Qt源碼目錄里qtbase\mkspecs\linux-arm-gnueabi-g++\ qmake.conf配置文件,修改交叉編譯器程序名相關的配置。
修改前:
修改后:
編譯發現一個鏈接錯誤,查找其原因是有一個源文件沒有被編譯,挺奇怪的。解決辦法是修改qtbase\src\corelib\kernel\kernel.pri文件,貌似qpoll.cpp編譯條件沒達到,改為強制編譯。
修改前:
修改后:
2.2、編譯之configure
打開cmd窗口,進入Qt源碼目錄,執行如下代碼,然后輸入y接受許可協議開始配置,等待配置完成。
configure.bat -release -opensource -prefix D:\Qt5.7.0_ARM_Linux -nomake tests -nomake examples -no-opengl -skip qtvirtualkeyboard -xplatform linux-arm-gnueabi-g++
注:命令中,
-release:編譯release版本。
-opensource:表示開源許可;
-prefix:指定安裝目錄,根據自己喜好;安裝后qmake程序默認就會根據這個目錄路徑去搜索頭文件和庫文件,
-nomake:表示不編譯后面參數指定的模塊;
-no-opengl:表示不編譯OpenGL,這個我們用不着,也沒有安裝OpenGL環境,所以不編譯,否則會出錯;
–skip qtvirtualkeyboard:跳過qtvirtualkeyboard,沒有相應庫環境,不編譯,否則編譯和安裝過程中可能會報錯。
-xplatform linux-arm-gnueabi-g++:指定交叉編譯器配置目錄為linux-arm-gnueabi-g++,qmake會到qtbase\mkspecs\linux-arm-gnueabi-g++里讀取qmake.conf文件,找到交叉編譯工具來編譯Qt動態庫。
默認-shared:編譯動態庫
默認-platform:為win32-g++,即指定本地編譯器配置目錄,到qtbase\mkspecs\ win32-g++目錄里讀取qmake.conf文件,找到本地編譯工具來編譯qmake。
2.3、編譯之make
Configure正常完成后,執行命令mingw32-make開始編譯。
2.4、編譯之make install
編譯完成后,執行mingw32-make install命令開始安裝,將會安裝把之前-prefix指定的目錄中。
注:qmake默認都是以-prefix指定的絕對目錄去搜索頭文件和庫文件,所以qmake本身可以移動變更路徑;但如果是整個Qt庫目錄路徑都變更,則需要在qmake.exe程序所在目錄增加一個qt.conf配置文件,文件內容為:
[Paths]
Prefix=..
即用配置文件qt.conf里的Prefix項去更改qmake搜索的庫路徑,上面是一般情況情況即整個庫目錄被移動后時的配置方式,即以父目錄為庫路徑。
3、安裝與配置Qt Creator
到Qt官網官網https://www.qt.io/download-open-source/#section-2下載獨立的Qt Creator程序安裝包qt-creator-opensource-windows-x86-4.1.0.exe來安裝。Qt Creator安裝程序本身不大,因為不含有qmake等工具,也不含有Qt庫。
也可以下載windows平台的Qt整包qt-opensource-windows-x86-mingw530-5.7.0.exe來安裝,里面包含有Qt Creator、windows-x86 Qt庫、mingw5.3.0。所以如果使用這個安裝包,之前可以不用單獨安裝MinGW。安裝此包后可以開發本地的Qt程序,經過如下的配置后還可以開發ARM linux程序。
不論使用上述哪個包安裝,都需要按如下配置好上面編譯好的Qt庫才能編譯ARM linux平台的Qt程序。
啟動運行Qt Creator,菜單工具(Tools)->選項(options),打開設置對話框,切換到構建與運行(build and run)項。先添加交叉編譯器,點擊添加,找到交叉編譯器路徑,取個名稱,如下圖。
設置make路徑:點擊Add,找到minGW安裝目錄bin里的mingw32-make.exe,取個名后添加,如下圖。
如果需要用到調試功能,設置調試器Debugger與上類似。
設置Qt版本,點擊添加,找到Qt庫安裝目錄bin里的qmake.exe,取個名后添加,如下圖
最后整合整套工具,設置構建套件,如下圖,點擊添加,取個名稱,選擇之前設置好的交叉編譯器和Qt版本,點擊Apply。最終點擊”設置為默認”將該套方案作為當前編譯方案。
至此,可以開發ARM linux上的Qt程序了。