Hi3531D 靜態交叉編譯 Qt5.13.2


環境:Ubuntu-18.04 64位

交叉編譯器:arm-hisiv600-linux

有關 Qt 的嵌入式相關開發,最好的參考資料就是Qt文檔:Qt for Embedded Linux

該英文文檔的翻譯版本:Qt5.7 Qt for Embedded Linux

首先,有必要區分幾個名詞:Qt,Qt/E,Qtopia Core, Qtopia。(引用自Qt中文論壇

Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由於Qt最早是在Linux中隨着KDE流行開來的,因此通常很多人說的Qt都指用於Linux/Unix的Qt/X11。

Qt/E(Qt/Embedded)是用於嵌入式Linux系統的Qt版本。Qt/E去掉了X Lib的依賴而直接工作於Frame Buffer上,因而效率更高,但它並不是Qt的子集,而應該是超集,部分機制(如QCOP等)不能用於Qt/X11中。

Qtopia是一個構建於Qt/E之上的類似桌面系統的應用環境。相比之下,Qt/E是基礎類庫。

Qtopia Core:就是原來的Qt/E,大概從Qt 4開始改名,把Qtopia Core並到Qtopia的產品線中去了。但實際上Qtopia Core就相當於原來的Qt/E,仍然作為基礎類庫。

另外,似乎奇趣最近又把Qtopia Core改名叫做Qt for Embedded Linux了,不知道是不是因為Qtopia Core搞得大家都很糊塗,沒人來買的緣故。


一、安裝交叉編譯器

【注意】本文中使用 Hi3531D 的 V600 編譯器,海思SDK文件可自行搜索下載。(安裝目錄權限要求為 root 用戶,所以部分命令使用了 sudo)


1、解壓海思SDK

$ tar -xvf Hi3531D V100R001C02SPC040.zip

2、進入到交叉編譯工具目錄

$ cd Hi3531D V100R001C02SPC040

3、 解壓交叉編譯工具

$ ./sdk.unpack

在 Ubuntu 中執行該命令,會報錯:./sdk.unpack source: not find,解決方法為:sudo dpkg-reconfigure dash,彈出提示框后選擇 No。

4、安裝交叉編譯工具

$ cd osdrv/opensource/toolchain/arm-hisiv600-linux
$ sudo mkdir -p /opt/hisi-linux/x86-arm/arm-hisiv600-linux 
$ sudo ./cross.v600.install

5、更新 shell 的環境變量

$ . /etc/profile

【注意】中間有一個空格,與 source /etc/profile 的作用一樣,都是讓剛剛安裝軟件的環境變量一直有效。


二、靜態編譯Qt5

先下載 qt-everywhere-src-5.13.2.tar.xz,下載地址: http://download.qt.io/archive/qt/


1、解壓海思SDK

$ tar -zxvf qt-everywhere-src-5.13.2.tar.xz

不要加上 sudo,否則解壓目錄的權限要求變為 root,會導致查找不到編譯器,后續編譯報錯,后續命令也一樣不加 sudo。


2、配置交叉編譯器

$ cd qt-everywhere-src-5.13.2/qtbase/mkspecs/devices
$ cp -rf linux-imx7-g++ linux-arm-hisilicon-hi3531d-g++
$ vi linux-arm-hisilicon-hi3531d-g++/qmake.conf
:%s/IMX7_CFLAGS/HI3531D_CFLAGS/g
:g/DISTRO_OPTS/d
:wq
$ cd ../../../

使用現成的 linux-imx7-g++,將其拷貝成 linux-arm-hisilicon-hi3531d-g++,再修改其 qmake.conf,則 g++ 編譯器配置成功。


3、創建安裝目錄

$ mkdir -p /usr/local/qt-5.13.2-hisiv600-static

4、配置 qt 的編譯參數

$ ./configure  -prefix /usr/local/qt-5.13.2-hisiv600-static  -static  -opensource -confirm-license -sql-sqlite  -qt-freetype  -nomake examples  -no-opengl  -no-gif  -device linux-arm-hisilicon-hi3531d-g++  -device-option CROSS_COMPILE=arm-hisiv600-linux-  -qt-zlib   -qt-libjpeg  -qt-libpng  -no-compile-examples -nomake tools -skip qtserialbus -no-iconv -qt-freetype

參數說明:

  • -prefix /usr/local/qt-5.12.8-hisiv600-static 指明靜態編譯的 Qt 安裝的目錄。

  • -static 指的是采用靜態編譯

  • -opensourcec 指定編譯和鏈接 Qt 開源版本

  • -confirm-license 表示自動確認許可證

  • -sql-sqlite 支持數據庫

  • -qt-freetype 使用 Qt 自帶的 libfreetype

  • -nomake examples 在構建時排除 examples 組件

  • -no-opengl 禁用 OpenGL 支持

  • -no-gif 不要編譯GIF讀取支持

  • -device linux-arm-hisilicon-hi3531d-g++ 跨平台編譯"海思編譯器"設備

  • -device-option CROSS_COMPILE=arm-hisiv600-linux- 添加device mkspec的device選項

  • -qt-zlib 使用 Qt 自帶 zlib 庫

  • -qt-libjpeg 使用 Qt 自帶的 libjpeg

  • -qt-libpng 使用 Qt 自帶的 libpng

  • -no-compile-examples 僅安裝 examples 的源碼,不要編譯它

  • -skip qtserialbus 排除整個 qtserialbus 模塊的建立

  • -no-iconv 不編譯對 iconv(3) 的支持

  • -tslib 編譯對 tslib 的支持

更多參數說明請參考:linux下編譯qt5.6.0靜態庫

【注意】Qt5.8以上的版本不能直接支持 tslib,要換成Qt5.8以下的版本。在后面加上:

-tslib -I/home/temp/tslib/include  -L/home/temp/tslib/lib

5、執行編譯

make -j8

6、安裝

make install -j8

在 /usr/local/qt-5.13.2-hisiv600-static/ 就是編譯好的 Qt。


參考:

[2]_解決在海思SDK包中的執行 ./sdk.unpack出現的問題



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM