arm-linux-gcc4.5.1 交叉編譯Qt4.7.0 + qtcreator

經過幾天的不斷嘗試,終於成功在板子上運行第一個qt程序,記錄配置過程與心得。

配置環境

搭建好linux最小系統的arm板子。
虛擬機 ubuntu16.04
交叉編譯器 友善之臂arm-linux-gcc4.5.1 https://github.com/friendlyarm/prebuilts.git
Qt源碼 qt-everywhere-opensource-src-4.7.0 https://download.qt.io/archive/qt/4.7 下載qt-everywhere-opensource-src-4.7.0.tar.gz

本配置會在ubuntu的/opt路徑下進行,至於爲什麼我也不懂,其他教程也是這樣做的。

經過幾天的失敗嘗試,我發現要特別注意交叉編譯器和qt版本的對應問題,大家在編譯時要根據別人成功編譯通過的例子選擇編譯器和qt,例如在這裏選擇arm-linux-gcc4.5.1和qt-everywhere-opensource-src-4.7.0。

配置交叉編譯器

提供的下載文件裏面有gcc和gcc-x64兩個文件夾,每個文件家又有兩個版本的編譯器,我們只需用到gcc下的arm-linux-gcc-4.5.1-v6-vfp.tar.xz編譯器。完整操作過程如下:
終端下

git clone https://github.com/friendlyarm/prebuilts.git
sudo mkdir -p /opt/FriendlyARM/toolchain
sudo tar xf prebuilts/gcc/arm-linux-gcc-4.5.1-v6-vfp.tar.xz -C /opt/FriendlyARM/toolchain/

此時/opt/FriendlyARM/toolchain/4.5.1/bin下就會有所需的編譯器。
添加環境變量:
修改/etc/profile, 在末尾添加:export PATH=/opt/FriendlyARM/toolchain/4.5.1/bin:$PATH
然後

source /etc/profile

測試:

arm-linux-gcc -v

如果出現很多字,最後是gcc version 4.5.1 (ctng-1.8.1-FA)就說明成功了。

交叉編譯Qt4.7.0

將下載好的qt-everywhere-opensource-src-4.7.0.tar.gz移動至/opt下
在/opt目錄下解壓:sudo tar -zxvf qt-everywhere-opensource-src-4.7.0.tar.gz
然後進入解壓後目錄:cd qt-everywhere-opensource-src-4.7.0
接下來修改配置文件:/opt/qt-everywhere-opensource-src-4.7.0/mkspecs/qws/linux-arm-g++/qmake.conf
在此之前大家可以打開路徑/opt/qt-everywhere-opensource-src-4.7.0/mkspecs/qws,在這裏插入圖片描述
該路徑下有許多文件夾,每個文件夾對應一個編譯器平臺,由於我們使用arm-linux-gcc交叉編譯器,因此只修改linux-arm-g++/qmake.conf。

然後在/opt/qt-everywhere-opensource-src-4.7.0路徑下執行:

sudo ./configure -prefix /opt/QtEmbedded-4.7.3 -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -confirm-license

這個命令會生成makefile文件,其中-xplatform qws/linux-arm-g++指明使用哪個編譯平臺,要選擇我們修改了qmake.conf的那一個。-prefix /opt/QtEmbedded-4.7.3這個指明編譯路徑。(因爲這個命令是複製別人的,忘了改路徑後來才發現,雖然不影響編譯,但應該改爲4.7.0比較好)
等待執行結束,然後:

sudo make

等待很久,執行結束,然後:

sudo make install

至此,編譯完成。
這時在/opt/QtEmbedded-4.7.3下就有編譯好的qt文件。

配置板子

將編譯安裝得到的lib、plugins拷貝到開發板中,lib中存放的是QT程序運行所需的動態庫文件,plugins中存放的應該是所需的插件。放在板子的/opt/Qt4.7.0路徑。
遠程傳送文件,電腦和嵌入式在同一局域網情況下,在電腦終端

scp -r lib plugins [email protected]:/opt/Qt4.7.0

修改板子環境變量,同樣是/etc/profile,添加

export LD_LIBRARY_PATH=/opt/Qt4.7.0/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt4.7.0/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=/opt/Qt4.7.0/lib/fonts

配置QtCreator

打開QtCreator,在“工具->選項 ”進行如下操作:

  1. 添加編譯器
    在這裏插入圖片描述
    路徑爲自己的交叉編譯器,arm-linux-g++
  2. 添加Qt Versions
    在這裏插入圖片描述
    路徑爲交叉編譯好的QtEmbedded-4.7.3/bin/qmake。
  3. 添加kit
    在這裏插入圖片描述設備類型設爲通用linux設備,Sysboot設置爲對應好的lib路徑,編譯器、Qt版本爲前面添加好的。ARM_Qt4.7.0左邊的黃色標誌說明改配置能用但不完整,紅色說明不能用,將鼠標移至上面會有更多信息。
  4. 點擊Apply。

測試

在QtCreator下編寫測試程序程序hello,
在這裏插入圖片描述
然後點擊構建hello。
將編譯好的可執行程序發送至板子上,在板子終端下執行:

./hello -qws

在這裏插入圖片描述
程序有界面了,但無法使用觸摸屏或鼠標,這個問題有待結束。

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