zoukankan      html  css  js  c++  java
  • 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出现的问题


  • 相关阅读:
    创建、删除swap分区
    从show slave status 中1062错误提示信息找到binlog的SQL
    ORA-28040: No matching authentication protocol
    Python中序列解包与函数的参数收集之间的关系
    第8.24节 使用__subclasses__查看类的直接子类
    利用Python特殊变量__dict__快速实现__repr__的一种方法
    Python中使用f字符串进行字符串格式化的方法
    转:python提取浏览器Cookie
    CSDN-markdown编辑器使用方法
    转:解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/13097520.html
Copyright © 2011-2022 走看看