Qt5.9.9交叉编译(带sqlite3、OpenSSL)

1、交叉编译工具链

      这里ARM平台是ARM CortexA9的,一般交叉编译工具链demo板厂商都会提供,若未提供或想更换新版本的交叉编译工具链可参考以下方式获取。

1.1 下载适用于ARM CortexA9的交叉编译工具链

Linaro Releases下载gcc4的最新版xxxx-i686_arm-linux-gnueabihf.tar.xz

1.2 配置交叉编译工具链

1.2.1 解压下载好的工具链包

$ tar xvf gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.xz

1.2.2 部署并配置工具链

拷贝到系统路径

$ sudo mv gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf /usr/local/arm-linux-gnueabihf

配置环境变量

$ vim ~/.bashrc

在文件末加入环境变量
export PATH=/usr/local/arm-linux-gnueabihf/bin:$PATH

使环境变量生效
$ source ~/.bashrc

检验工具链是否正常使用

$ arm-linux-gnueabihf-gcc -v

使用内建 specs。
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/local/arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.4/lto-wrapper
目标:arm-linux-gnueabihf
配置为:/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=hard --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu/arm-linux-gnueabihf/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu
线程模型:posix
gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01)

 2、SQLite交叉编译

    在后面交叉编译Qt源码的时候会用到

2.1 SQLite源码获取

SQLite Download Page下载最新版sqlite-autoconf-xxxx.tar.gz SQLite源码

2.2 交叉编码

解压源码
$ tar -xvf sqlite-autoconf-3360000.tar.gz

到源码路径
$ cd sqlite-autoconf-3360000/

配置编译
$ ./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/opt/arm_sqlite

构建
$ make

安装
$ sudo make install

 3、OpenSSL交叉编译

    Qt使用SSL时需用到OpenSSL库。

3.1 下载OpenSSL源码

Releases · openssl/openssl · GitHub下载OpenSSL_1_x_x最新版的,因为Qt5.9只支持OpenSSL_1的环境,这里下载OpenSSL_1_1_1k 

3.2 交叉编译

解压
@ tar -xvf openssl-OpenSSL_1_1_1k.tar.gz

进入到源码路径
@ cd openssl-OpenSSL_1_1_1k/

配置为静态编译,注意这里的/home/xxx是当前用户路径,xxx代表当前用户名
@ ./config -fPIC no-shared no-asm --prefix=/home/xxx/arm_openssl --cross-compile-prefix=arm-linux-gnueabihf-

修改Makefile
@ vim Makefile

搜索并将-m64删除

编译
@ make -j4

安装
@ make install

4、Qt交叉编译

4.1 下载Qt5.9.9源码

https://download.qt.io/archive/qt/5.9/5.9.9/single/下载Qt5.9.9源码

4.2 配置编译
 

解压qt源码包
$ tar xvf qt-everywhere-opensource-src-5.9.9.tar.xz

进入到源码目录
$ cd qt-everywhere-opensource-src-5.9.9

4.2.1 配置qtbase/mkspecs/qmake.conf文件

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

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

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

QMAKE_INCDIR += /opt/arm_sqlite/include   #已编译的sqlite头文件路径
QMAKE_LIBDIR += /opt/arm_sqlite/lib       #已编译的sqlite库路径

QMAKE_INCDIR += /home/wzl/arm_openssl/include   #已编译的openssl头文件路径
QMAKE_LIBDIR += /home/wzl/arm_openssl/lib       #已编译的openssl库路径

# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_NM                = arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-linux-gnueabihf-strip
load(qt_config)

4.2.1 编写构建脚本

$ vim build.sh

内容如下:
#!/bin/sh
./configure \
-v \
-prefix /home/wzl/workspace/Arm_Qt5.9.4 \
-release \
-opensource \
-no-accessibility \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-sqlite \
-qt-zlib \
-openssl-linked \
-no-sse2 \
-no-openssl \
-opengl es2 \
-no-cups \
-no-glib \
-no-iconv \
-no-pkg-config \
-no-separate-debug-info \
-skip qt3d \
-skip qtcanvas3d \
-skip qtdoc \
-skip qtwayland
exit

4.2.3 编译

配置执行权限
$ sudo chmod 777 build.sh

$ ./build.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/420298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣精选算法100道——颜色分类(双指针和三指针俩种方法解决此题)

目录 🚩了解题意 🚩算法分析 第一种方法:双指针 🚩代码实现一 第二种方法:三指针 🚩代码实现二 🚩了解题意 本题将整数0,1,2代表红白篮,nums中的整数并…

深度学习-神经网络原理

文章目录 神经网络原理1.单层神经网络1.1 回归单层神经网络:线性回归1.2 二分类单层神经网络:sigmoid与阶跃函数 1.3 多分类单层神经网络:softmax回归 神经网络原理 人工神经网络(Artificial Neural Network,ANN&…

项目-SERVER模块-Socket模块

Socket模块 一、Socket模块是什么?二、代码实现1.成员变量2.构造、析构函数3.获取套接字文件描述符4.创建套接字5.绑定地址信息6.开始监听连接请求7.向服务器发起连接8.获取新连接9.接收数据10.非阻塞接收数据11.发送数据12.非阻塞发送数据13.关闭套接字14.创建一个…

灯塔:HTML笔记

网页由哪些部分组成? *文字 图片 音频 视频 超链接 程序员写的代码是通过浏览器转换成网页的 五大浏览器有哪些? *IE浏览器 *火狐浏览器(Firefox) *谷歌浏览器(Chrome) *Safari浏览器 *欧朋浏览器&…

AI新工具(20240301) Ideogram; Image to Music Generator等

1: Ideogram 全新的多模态生图AI工具,以其优秀的文字渲染能力和生图能力受到业界瞩目 Ideogram是一个创新的AI工具,它通过在生成的图片中自然地整合文字,解决了生图AI领域长期存在的一个难题。这个工具特别擅长将文本以极其自然和协调的方式…

第三百七十五回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"相关的内容,本章回中将介绍如何让Text组件中的文字自动换行.闲话休提,让我们一起Talk Flutter吧。 …

铝型材【欧标】

2020: 3030: 4040: 欧标T型螺丝 2020: 10最大 20120 59 3030: 12最大 30150 76 4040: 40最大 40200 …

RV1126芯片概述

RV1126芯片概述 前言1 主要特性2 详细参数 前言 1 主要特性 四核 ARM Cortex-A7 and RISC-V MCU250ms快速开机2.0Tops NPU14M ISP with 3帧 HDR支持3个摄像头同时输入4K H.264/H.265 视频编码和解码 2 详细参数

TikTok矩阵系统功能怎么写?常用源代码是什么?

TikTok矩阵系统的功能是如何编写的?又有哪些常用的源代码支撑这些功能呢?本文将通过五段源代码的分享,为大家揭开TikTok矩阵系统的神秘面纱。 一、TikTok矩阵系统的核心功能 TikTok的矩阵系统涵盖了多个核心功能,包括但不限于用户管理、内容分发、推…

MacBook将iPad和iPhone备份到移动硬盘

#创作灵感# 一个是ICloud不够用,想备份到本地;然而本地存储不够用,增加容量巨贵,舍不得这个钱,所以就想着能不能备份到移动硬盘。刚好有个移动固态,所以就试了一下,还真可以。 #正文# 说一下逻…

你真的了解C语言中的【柔性数组】吗~

柔性数组 1. 什么是柔性数组2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的优势 1. 什么是柔性数组 也许你从来没有听说过柔性数组这个概念,但是它确实是存在的。 C99中,结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员…

DiskMirror-spring-boot-starter 技术|

DiskMirror-spring-boot-starter 技术 diskMirror 实现了 SpringBoot 的 starter 能够集成到 SpringBoot 中。 DiskMirror 的 starter,通过引入此类,可以直接实现 diskMirror 在 SpringBoot 中的自动配置,接下来我们将使用案例逐步的演示 d…

AI视频又又炸了!照片+声音变视频,阿里让Sora女主唱歌小李子说rap

Sora之后,居然还有新的AI视频模型,能惊艳得大家狂转狂赞! 有了它,《狂飙》大反派高启强化身罗翔,都能给大伙儿普法啦(狗头)。 这就是阿里最新推出的基于音频驱动的肖像视频生成框架,…

马斯克正式起诉OpenAI和奥特曼!

就在刚刚,马斯克闹出来一件大事——正式起诉OpenAI和Sam Altman,并要求OpenAI 恢复开源GPT-4等模型! 众所周知,马斯克这两年一只在推特上指责 OpenAI是CloseAI(不开源),但都只是停留在口头上。 而这次马斯克动了真格。…

搭建LNMP环境并搭建论坛和博客

目录 一、LNMP架构原理 二、编译安装Nginx 三、编译安装MySQL 四、编译安装PHP 五、配置Nginx支持PHP解析 六、安装论坛 七、安装博客 一、LNMP架构原理 LNMP架构,是指在Linux平台下,由运行Nginx的web服务器,运行PHP的动态页面解析程序…

聚道云软件连接器2月新增应用/产品更新合集

2月更新概要 新增应用: 应用1:旺店通 应用2:明道云 应用3:春雨医生 应用4:姿美堂 应用5:三维家 新增&更新功能 1、【流程】中增加版本管理功能 新增应用 应用1:旺店通 旺店通ERP隶…

38.云原生之Istio安全-流量鉴权加密

云原生专栏大纲 文章目录 TLS 和 mTLSTLS 和 mTLS使用场景TLS 加密通信的流程终止 TLS什么时候用 mTLS?什么时候不用 mTLS? 流量加密入口流量加密内部流量加密PeerAuthentication 为工作负载设置 mTLSDestinationRule 为工作负载设置 mTLS 安全最佳实战…

(定时器/计数器)中断系统(详解与使用)

讲解 简介 定时器/计数器 定时器实际上也是计数器,只是计数的是固定周期的脉冲 定时和计数只是触发来源不同(时钟信号和外部脉冲)其他方面是一样的。 定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值…

Qt应用软件【测试篇】vargrid内存检查工具

文章目录 vargrid介绍vargrid官网vargrid安装常用命令Valgrind的主要命令vargrid介绍 Valgrind是一个用于构建动态分析工具的框架,能自动检测许多内存管理和线程错误,并详细分析程序性能。Valgrind发行版包括七个成熟工具:内存错误检测器、两个线程错误检测器、缓存和分支预…

防御保护课程笔记

内容安全 防病毒 过滤技术 密码学