i.mx6q 移植Qt5.9.1(完美支持opengl徒扶、Qt quick2粮彤、QML)

距離上篇文章移植Qt5.6.1有一年時間了, 最近剛好發(fā)現(xiàn)最新的QT LTS 5.9.1發(fā)布了姜骡,上次的移植對QML程序還存在問題导坟,無法運行,想著看看5.9.1是不是可以有所進展圈澈,在折騰了一個多星期后惫周,這次終于有好消息了,如標(biāo)題所寫!!!

下面就分享下如何打造一個能流暢運行QML的i.mx6Q開發(fā)板環(huán)境康栈。

本人環(huán)境如下:

  1. 飛凌i.mx6Q開發(fā)板递递,這個板子的Linux系統(tǒng)太老了喷橙,很多東西沒有,像SD卡升級內(nèi)核這種后期工廠批量生產(chǎn)的方式就不支持登舞,早知道買NXP官網(wǎng)的了(好像淘寶有另一家用的是新內(nèi)核)重慢。


    開發(fā)板圖片
  2. Linux 3.0.35內(nèi)核,就因為是這個老版本逊躁,導(dǎo)致多做了些工作似踱,后面有說。

  3. U-Boot 2009.08

  4. Ubuntu 14.04 64位

準(zhǔn)備工作

  1. 官網(wǎng)下載Qt5.9.1源代碼
  2. QT從5.8開始稽煤,編譯工具就必須要支持C++11標(biāo)準(zhǔn)的才行核芽,而GCC版本4.8以上才支持這個標(biāo)準(zhǔn),所以飛凌自帶的交叉工具鏈已經(jīng)不能拿來編譯Qt5.9.1了酵熙。網(wǎng)上找了幾個版本轧简,發(fā)現(xiàn)太新的GCC在Linux3.0.35也會有問題,最后找了個arm-4.8.1的匾二,才運行正常哮独。(鏈接: https://pan.baidu.com/s/1pKAi0ER 密碼: f2jn)
  3. 自行百度裝好編譯開發(fā)所需環(huán)境

編譯步驟

1. 解壓qt-everywhere-opensource-src-5.9.1.tar.xz
2. 解壓arm-none-linux-gnueabi-linux-4.8.1.tar.bz2到/opt目錄
3. 找出開發(fā)板自帶的根文件系統(tǒng),并解壓到rootfs文件夾下面(我的為:/home/volfull/Workspace/rootfs/)

將GCC4.8.1的C庫文件覆蓋掉老根文件系統(tǒng)的C庫文件

$ cp /opt/arm-4.8.1/arm-none-linux-gnueabi/libc/lib/* /home/volfull/Workspace/rootfs/lib/

還需要同樣地覆蓋掉開發(fā)板的/lib/里面的文件察藐。

4. 修改QT的qmake.conf文件

$ cd qt-everywhere-opensource-src-5.9.1
$ vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

修改為:

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

#QT_QPA_DEFAULT_PLATFORM = eglfs   #linuxfb   

IMX6_CFLAGS             = -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 
IMX6_CFLAGS_RELEASE     = -O2 $$IMX6_CFLAGS 
QMAKE_CFLAGS_RELEASE   += $$IMX6_CFLAGS_RELEASE 
QMAKE_CXXFLAGS_RELEASE += $$IMX6_CFLAGS_RELEASE 
QMAKE_CFLAGS_DEBUG     += $$IMX6_CFLAGS 
QMAKE_CXXFLAGS_DEBUG   += $$IMX6_CFLAGS

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX               = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK              = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-objcopy
QMAKE_NM                = /opt/arm-4.8.1/bin/arm-none-linux-gnueabi-nm -P

QMAKE_INCDIR            = /home/volfull/Workspace/rootfs/usr/include  
QMAKE_LIBDIR            = /home/volfull/Workspace/rootfs/lib  

#QMAKE_LIBDIR            += /home/volfull/Workspace/rootfs/usr/lib  

QMAKE_INCDIR_OPENGL_ES2 = /home/volfull/Workspace/rootfs/usr/include  
QMAKE_LIBDIR_OPENGL_ES2 = /home/volfull/Workspace/rootfs/usr/lib  

QMAKE_INCDIR_EGL = /home/volfull/Workspace/rootfs/usr/include  
QMAKE_LIBDIR_EGL = /home/volfull/Workspace/rootfs/usr/lib  


QMAKE_LIBS_OPENGL_ES1       += -lGLESv1_CM -lEGL -lGAL  
QMAKE_LIBS_OPENGL_ES1CL     += -lGLES_CL -lEGL -lGAL  
QMAKE_LIBS_EGL         += -lEGL -lGAL
QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL -lGAL  
QMAKE_LIBS_OPENVG      += -lOpenVG -lEGL -lGAL  
#QMAKE_LIBS             += -ljpeg -ldbus-1 -lrt -lpthread    #編譯選項  
#DISTRO_OPTS += hard-float          #浮點運算使用軟件不使用硬件  


# Preferred eglfs backend  
EGLFS_DEVICE_INTEGRATION = eglfs_viv  

load(qt_config)

記得修改里面的路徑為你系統(tǒng)對應(yīng)的路徑皮璧!

5. 進行配置

$ ./configure -release -xplatform linux-arm-gnueabi-g++ -no-opengl -opengl es2 -prefix ~/qt5.9.1-arm -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtimageformats -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtsensors -skip qtserialbus -skip qtspeech -skip qtsvg -skip qttools -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -no-feature-iconv -no-feature-gestures -no-qml-debug

正常不會出錯,可以看到結(jié)果如下:

Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for: linux-arm-gnueabi-g++ (arm, CPU features: <none>)
Configuration: cross_compile compile_examples enable_new_dtags largefile precompile_header shared rpath release c++11 concurrent dbus no-pkg-config mremap no-qml-debug reduce_exports stl
Build options:
  Mode ................................... release
  Optimize release build for size ........ no
  Building shared libraries .............. yes
  Using C++ standard ..................... C++11
  Using gold linker ...................... no
  Using new DTAGS ........................ yes
  Using precompiled headers .............. yes
  Using LTCG ............................. no
  Target compiler supports:
    NEON ................................. no
  Build parts ............................ libs
Qt modules and options:
  Qt Concurrent .......................... yes
  Qt D-Bus ............................... yes
  Qt D-Bus directly linked to libdbus .... no
  Qt Gui ................................. yes
  Qt Network ............................. yes
  Qt Sql ................................. yes
  Qt Testlib ............................. yes
  Qt Widgets ............................. yes
  Qt Xml ................................. yes
Support enabled for:
  Using pkg-config ....................... no
  QML debugging .......................... no
  udev ................................... no
  Using system zlib ...................... no
Qt Core:
  DoubleConversion ....................... yes
    Using system DoubleConversion ........ no
  GLib ................................... no
  iconv .................................. no
  ICU .................................... no
  Logging backends:
    journald ............................. no
    syslog ............................... no
    slog2 ................................ no
  Using system PCRE2 ..................... no
Qt Network:
  getaddrinfo() .......................... yes
  getifaddrs() ........................... yes
  IPv6 ifname ............................ yes
  libproxy ............................... no
  OpenSSL ................................ no
    Qt directly linked to OpenSSL ........ no
  SCTP ................................... no
  Use system proxies ..................... yes
Qt Gui:
  Accessibility .......................... yes
  FreeType ............................... yes
    Using system FreeType ................ no
  HarfBuzz ............................... yes
    Using system HarfBuzz ................ no
  Fontconfig ............................. no
  Image formats:
    GIF .................................. yes
    ICO .................................. yes
    JPEG ................................. yes
      Using system libjpeg ............... no
    PNG .................................. yes
      Using system libpng ................ no
  EGL .................................... yes
  OpenVG ................................. no
  OpenGL:
    Desktop OpenGL ....................... no
    OpenGL ES 2.0 ........................ yes
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
  Session Management ..................... yes
Features used by QPA backends:
  evdev .................................. yes
  libinput ............................... no
  INTEGRITY HID .......................... no
  mtdev .................................. no
  tslib .................................. no
  xkbcommon-evdev ........................ no
QPA backends:
  DirectFB ............................... no
  EGLFS .................................. yes
  EGLFS details:
    EGLFS i.Mx6 .......................... yes
    EGLFS i.Mx6 Wayland .................. no
    EGLFS EGLDevice ...................... no
    EGLFS GBM ............................ no
    EGLFS Mali ........................... no
    EGLFS Raspberry Pi ................... no
    EGL on X11 ........................... no
  LinuxFB ................................ yes
  VNC .................................... yes
  Mir client ............................. no
Qt Widgets:
  GTK+ ................................... no
  Styles ................................. Fusion Windows
Qt PrintSupport:
  CUPS ................................... no
Qt Sql:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... no
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no
QtXmlPatterns:
  XML schema support ..................... yes
Qt QML:
  QML interpreter ........................ yes
  QML network support .................... yes
Qt Quick:
  Direct3D 12 ............................ no
  AnimatedImage item ..................... yes
  Canvas item ............................ yes
  Support for Qt Quick Designer .......... yes
  Flipable item .......................... yes
  GridView item .......................... yes
  ListView item .......................... yes
  Path support ........................... yes
  PathView item .......................... yes
  Positioner items ....................... yes
  ShaderEffect item ...................... yes
  Sprite item ............................ yes
Qt Wayland Client ........................ no
Qt Wayland Compositor .................... no
Qt Quick Controls 2:
  Styles ................................. Default Material Universal
Qt Quick Templates 2:
  Hover support .......................... yes
  Multi-touch support .................... yes

Note: Also available for Linux: linux-clang linux-icc

Note: No wayland-egl support detected. Cross-toolkit compatibility disabled.

WARNING: Cross compiling without sysroot. Disabling pkg-config
6. 開始編譯

$ make -j8

這里會花一些時間分飞,按照我的步驟走應(yīng)該不會出錯悴务。

7. 生成最后的安裝文件夾

$ make install

生成這個文件夾~/qt5.9.1-arm,將這個文件夾拷貝到開發(fā)板的根文件系統(tǒng)/opt下面譬猫。到這步Qt5.9.1的移植工作就算做好了讯檐,恭喜恭喜。

8. 運行時提示缺少字體

新版本的Qt是不自帶字體文件的了染服,需要自行網(wǎng)上找個字體文件放到開發(fā)板的/opt/qt5.9.1-arm/lib/fonts下面别洪,如wqy-zenhei.ttc。


附:開發(fā)板上qt5.9.1的環(huán)境變量(QT_ROOT 是你開發(fā)板上qt5.9.1的路徑):

#!/bin/sh

##qt5.9.1-arm
export QT_ROOT=/opt/qt5.9.1-arm
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QML2_IMPORT_PATH=$QT_ROOT/qml
export QT_QPA_PLATFORM=eglfs
export QT_EGLFS_IMX6_NO_FB_MULTI_BUFFER=2
export QT_QPA_EGLFS_PHYSICAL_WIDTH=698             #根據(jù)你的顯示器設(shè)置寬度柳刮,單位mm
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=392           #根據(jù)你的顯示器設(shè)置高度挖垛,單位mm

關(guān)于如何用Qt Creator編譯arm版本的程序,設(shè)置下交叉工具鏈就可以了诚亚,很簡單晕换,網(wǎng)上也有參考,這里就不說了站宗。
運行一個Qt Creator自帶的QML例子闸准,會發(fā)現(xiàn)動畫效果很流暢。

這篇文章基本把許多坑都繞過去了梢灭,有問題也歡迎留言討論夷家。

都看到這里了蒸其,請順手幫忙點個“喜歡”!?饪臁摸袁!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市义屏,隨后出現(xiàn)的幾起案子靠汁,更是在濱河造成了極大的恐慌,老刑警劉巖闽铐,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝶怔,死亡現(xiàn)場離奇詭異,居然都是意外死亡兄墅,警方通過查閱死者的電腦和手機踢星,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隙咸,“玉大人沐悦,你說我怎么就攤上這事∥宥剑” “怎么了藏否?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長概荷。 經(jīng)常有香客問我秕岛,道長碌燕,這世上最難降的妖魔是什么误证? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮修壕,結(jié)果婚禮上愈捅,老公的妹妹穿的比我還像新娘。我一直安慰自己慈鸠,他們只是感情好蓝谨,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著青团,像睡著了一般譬巫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上督笆,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天芦昔,我揣著相機與錄音,去河邊找鬼娃肿。 笑死咕缎,一個胖子當(dāng)著我的面吹牛珠十,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凭豪,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼焙蹭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嫂伞?” 一聲冷哼從身側(cè)響起孔厉,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帖努,沒想到半個月后烟馅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡然磷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年郑趁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姿搜。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡寡润,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舅柜,到底是詐尸還是另有隱情梭纹,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布致份,位于F島的核電站谴餐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骄崩。R本人自食惡果不足惜校哎,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滔蝉。 院中可真熱鬧击儡,春花似錦、人聲如沸蝠引。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽螃概。三九已至矫夯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吊洼,已是汗流浹背训貌。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留融蹂,地道東北人旺订。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓弄企,卻偏偏與公主長得像,于是被迫代替她去往敵國和親区拳。 傳聞我的和親對象是個殘疾皇子拘领,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容