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出现的问题


原文地址:https://www.cnblogs.com/linuxAndMcu/p/13097520.html