Qt源码交叉编译带openssl的Qt版本

一.背景
近期项目由于对接的后台服务是https的,之前交叉编译的Qt是不带openssl的,为了能支持https,必须要重新编译Qt。
二.环境
环境准备:
Ubuntu版本 :18.04;
openssl 版本:1.1.1.g;
Qt版本:5.15.10
交叉编译链:aarch64-none-linux-gnu-gcc
openssl1.1.1g源码包下载地址
Qt5.15.10源码包下载地址
三.交叉编译
1.交叉编译Openssl库
因为Qt的编译要依赖openssl,所以要先交叉编译openssl,编译方法参见文章:
linux环境交叉编译openssl库,以使Qt支持https
2.交叉编译Qt
openssl安装好之后,先解压Qt的源码包

tar -xvf qt-everywhere-opensource-src-5.15.10.tar.xz

再cd到Qt源码的文件夹中
进入到“…/qt-everywhere-src-5.15.10/qtbase/mkspecs/linux-aarch64-gnu-g++”文件夹,用编辑器打开并修改“qmake.conf”文件。

#
# qmake configuration for building with aarch64-linux-gnu-g++
#MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublibQT_QPA_DEFAULT_PLATFORM=linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -ltsinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)#openssl
QMAKE_INCDIR += /usr/local/openssl1.1.1g-Arm/include
QMAKE_LIBDIR += /usr/local/openssl1.1.1g-Arm/lib# modifications to g++.conf
QMAKE_CC                = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-gcc
QMAKE_CXX               = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK              = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB        = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-g++# modifications to linux.conf
QMAKE_AR                = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-objcopy
QMAKE_NM                = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-nm -P
QMAKE_STRIP             = /opt/gcc-arm-10.3-linux-gnu/bin/aarch64-none-linux-gnu-strip
load(qt_config)

改完如下图:
在这里插入图片描述
编写Qt的配置脚本,自己随便命名写一个shell脚本,放在Qt源码包,用来执行Qt配置,如下:

#!/bin/sh 
./configure -prefix /usr/local/Qt_5.15.10-Arm-openssl \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-openssl-linked \
-no-openssl \
-xplatform linux-aarch64-gnu-g++ \
-optimized-qmake \
--rpath=no \
-pch \
-skip qtandroidextras \
-make libs \
-nomake examples \
-nomake tools \
-nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-recheck-all

这里要注意下图中的几点说明:
在这里插入图片描述
注意:这个sh脚本如果有些配置不对,会在make编译时出现各种错误。比如
在这里插入图片描述
就是在shell脚本中将“-openssl-linked\ -no-openssl \”两行改为了“-openssl-linked -I"/usr/local/openssl1.1.1g-Arm/include" \ -L"/usr/local/openssl1.1.1g-Arm/include" \”和“-openssl \”导致报错。

我的脚本是“autoconfigure5.15.10OK.sh”,执行shell脚本命令运行,对Qt编译进行配置

sh autoconfigure5.15.10OK.sh

在这里插入图片描述
执行脚本后是这样,这说明我由于一些配置和依赖缺少,导致本次编译不能编译3dcore,3drender,webengine等五个模块,并且警告由于sysroot和pkg-config导致QtWebEngine和QtPdf模块不能构建,如果后面要用这两个模块,那么这次编译也是不行的。好在目前暂时用不到,提示配置完成就先make。
配置完成后,执行make编译(权限不够就用sudo )

sudo make -j4

编译完成后,实行安装命令

sudo make install

编译和安装都需要挺久时间,等安装完成后,将新的Qt配置到QtCreator上,配置方法参见文章
Ubuntu中完成Linux环境Qt源码交叉编译并配置Qt环境
配置好之后,进行验证
在代码任意可以执行的地方加上这段进行验证

//.pro文件加上
QT += network
//任意可执行的代码中加上
include <QSslSocket>
//查看需要的openssl版本
QString strVersion = "QSslSocket="<<QSslSocket::sslLibraryBuildVersionString();//查看是否支持
bool bExist = (QSslSocket::supportsSsl() == true ? "true" : "false");

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vscode 搭建 golang 开发环境

介绍 在 vscode 搭建 go 的开发环境需要区分两个方向&#xff1a; go 1.19.0 及其更高版本go 1.19.0 之前的版本 为什么这么分&#xff0c;因为 vscode-go 插件自带的工具安装脚本全部都是装最新版的各类工具&#xff0c;这些工具中有部分要求 go 1.19.0 以上才能安装成功。…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下&#xff0c;不同服务之间频繁调用&#xff0c;对于某个具体的服务而言&#xff0c;可能会面临高并发场景。在这样的情况下&#xff0c;提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题&#xff0c;比如业务处理耗时过长、…

SpringBoot把nacos配置注入时数据注入时出现莫名错误

一、错误详情 我在nacos的配置a是003457 但是注入的数据是1839 二、解决方法 通过加号可以解决这个问题: 数据正确了&#xff1a;

【BUG】已解决:SyntaxError: invalid syntax

SyntaxError: invalid syntax 目录 SyntaxError: invalid syntax 【常见模块错误】 【解决方案】 常见原因及解决方法 解决步骤 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职…

Ubuntu22.04离线安装nginx

下载安装包 nginx nginx下载地址&#xff0c;选stable的即可&#xff0c;传到服务器上面&#xff0c;记住上传路径 提示: 下面的openssl&#xff0c;zlib,pcre也可以不下载也可以&#xff0c;我这里是考虑到完全离线下载的情况openssl 这个是https需要弄得&#xff0c;如果生产…

【JavaScript】箭头函数

具体讲解 之前写 this 的指向时就提到过箭头函数&#xff0c;但是由于其比较复杂&#xff0c;还是单独开一篇来讲箭头函数。 箭头函数&#xff0c;箭头函数不能作为构造函数&#xff0c;没有原型 prototype&#xff0c;不能 new。 在箭头函数中&#xff0c;this 关键字指向的是…

MMROTATE的混淆矩阵confusion matrix生成

mmdetection中加入了混淆矩阵生成并可视化的功能&#xff0c;具体的代码在tools/analysis_tools/confusion_matrix.py。 mmrotate由于主流遥感数据集中的DOTA数据集标注格式问题&#xff0c;做了一些修改&#xff0c;所以我们如果是做遥感图像检测的Dota数据集的混淆矩阵&…

C:图案打印

引言 本篇文章讲了一些常见的图形编程题&#xff0c;并总结了一些规律。 1、打印空心正方形 1.1 代码展示&#xff1a; #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…

数据结构C++——优先队列

文章目录 一、定义二、ADT三、优先队列的描述3.1 线性表3.2 堆3.2.1 最大堆的ADT3.2.2 最大堆的插入3.2.3 最大堆的删除3.2.4 最大堆的初始化3.3 左高树 LT3.3.1 高度优先左高树HBLT3.3.2 重量优先左高树WBLT3.3.3 最大HBLT的插入3.3.4 最大HBLT的删除3.3.5 合并两棵最大HBLT3.…

京东商品详情API返回值:商品ID与标题解析

京东商品详情API是京东电商平台提供的一个接口&#xff0c;用于获取商品的详细信息&#xff0c;包括商品ID、商品标题、价格、库存等。然而&#xff0c;需要注意的是&#xff0c;直接访问和使用京东的商品详情API通常需要符合京东的开放平台规则&#xff0c;并可能需要注册成为…

OpenCV 卷积操作 均值,高斯,中值滤波 图片降噪

文章目录 卷积概念卷积的作用1. 图像平滑与去噪2. 边缘检测3. 特征提取4. 图像增强 常见的三种滤波均值滤波均值滤波的步骤优点和缺点使用示例 高斯滤波示例代码 中值滤波中值滤波的基本原理数学表达式中值滤波的步骤示例优点和缺点使用示例 三种滤波 图片降噪 Python实现 卷积…

redis高可用之主从复制、哨兵以及Cluster集群

目录 一、Redis主从复制 1&#xff09;主从复制的作用 2&#xff09;主从复制流程 3&#xff09;搭建Redis主从复制 1、部署redis服务器 2、修改Redis配置文件&#xff08;所有节点操作&#xff09; 3、验证主从复制结果 二、哨兵模式 1&#xff09;哨兵的作用 2&…

设计模式-领域逻辑模式-SQL的分离

尽管SQL已经在商业软件中广泛应用&#xff0c;但它在使用中还存在一定缺陷 许多应用程序开发者不能充分理解SQL&#xff0c;同时很多习惯用SQL的开发人员又可能组织不好程序代码。尽管现在有很多技术可以把SQL封装在程序里&#xff0c;但大多封装的还很牵强。 SQL分离的思路&…

谷粒商城实战笔记-46-商品服务-API-三级分类-配置网关路由与路径重写

文章目录 一&#xff0c;准备工作1&#xff0c;新增一级菜单2&#xff0c;新增二级菜单 二&#xff0c;前端树形界面开发1&#xff0c;开发分类展示组件 三&#xff0c;远程调用接口获取商品分类数据1&#xff0c;远程调用2&#xff0c;路由配置 错误记录 本节的主要内容&#…

Cisco ISR 2代路由器,1900,2900,3900系列RTU License使用方法

1 情况说明 客户处的2台Cisco 2911要开启ip sla ,但发现无法支持&#xff0c;查询得知需要有data license才可以。可以通过开启RTU license激活。开启RTU后正常. 2 操作方法 License种类如下&#xff1a;  ipbase ipbasek9 Permanent ipbasek9  security securityk9 Eva…

C++【new delete】【operator new operator delete】

目录 数据段存储位置的小复习 new 和 delete operator new 和 operator delete new和delete调用operator new和operator delete new [ ] 和 delete [ ]的原理 数据段存储位置的小复习 全局变量和静态变量都在静态区&#xff0c;也称数据段 全局变量int x 0 和 全局静态变…

全网最实用--神经网络各个组件以及效率指标 (含代码助理解,粘贴即用)

文章目录 一、神经网络相关组件0.前奏1.全连接层&#xff08;Fully Connected Layer, FC&#xff09;/密集层&#xff08;Dense Layer&#xff09;:2.卷积层&#xff08;Convolutional Layer, Conv&#xff09;:a.一维卷积b.二维卷积c.分组卷积 3.池化层&#xff08;Pooling La…

JavaWeb系列二十三: web 应用常用功能(文件上传下载)

文件上传下载 基本介绍文件上传基本原理文件上传应用实例文件上传注意事项和细节 文件下载基本原理文件下载应用实例文件下载注意事项 ⬅️ 上一篇: JavaWeb系列二十二: 线程数据共享和安全(ThreadLocal) &#x1f389; 欢迎来到 JavaWeb系列二十三: web 应用常用功能(文件上传…

数据结构:基础概念

一、相关概念 概念 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff1a;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff1a;数据和数据之间是一对一的关系 树&#xff1a; 一对多 图&#xff1a;多对多 物理结构(在内存当中的存储关系)…

堆的相关特点

一.建堆的两种方法 给定一个数组&#xff0c;其中数组里面的元素个数是n个如何能够把这个数组建立成为一个堆&#xff0c;今天探讨两种方法&#xff0c;分别是向上调整法和向下调整法&#xff0c;分别探讨他们的时间复杂度 向上调整法&#xff08;以小堆为例&#xff09; 回…