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

news2024/11/14 18:20:34

一.背景
近期项目由于对接的后台服务是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 = sublib

QT_QPA_DEFAULT_PLATFORM=linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts

include(../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.coloradmin.cn/o/1944847.html

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

相关文章

go-kratos 学习笔记(5) 删除hellword从新生成服务

go-kratos 删除hellword模版里的服务&#xff0c;从新生成服务users 直接删除api/helloword 目录&#xff0c;在api目录下新建 users目录&#xff1b;使用命令生成新的proto #项目根目录执行 kratos proto add api/users/user.protobuf generate生成的user.proto需要根据自己…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用&#xff0c;不同环境、场景及应用合适光源都不一样&#xff0c;今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线&#xff0c;为提高生产效率做出贡献。 TH2系列光源的特点&#xff1a; 1、实现了更高一级的高亮度 实现了更…

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包&#xff0c;适用于 Debian 和 Ubuntu 系统&#xff1a; curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…

Doris全方位教程+应用实例

Impala性能稍领先于presto,但是presto在数据源支持上非常丰富&#xff0c;包括hive、图数据库、传统关系型数据库、Redis等 缺点&#xff1a;这两种对hbase支持的都不好&#xff0c;presto 不支持&#xff0c;但是对hdfs、hive兼容性很好&#xff0c;其实这也是顺理成章的&…

单片机学习(18)--红外遥控器

红外遥控器 17.1红外遥控的基础知识1.红外遥控简介2.硬件电路3.基本发送和接收4.NEC编码5.遥控器键码6.51单片机的外部中断7.外部中断寄存器 17.2红外遥控的程序代码1.红外遥控&#xff08;1&#xff09;工程目录&#xff08;2&#xff09;main.c函数&#xff08;3&#xff09;…

ubuntu在命令行输出里查找内容,dmesg

直接执行查看日志指令会出来很多页。dmesg为开机日志信息。记录了开机时硬件的过程 sudo dmesg 执行结果&#xff1a; 可以用竖号“|”&#xff0c;在前一条命令返回的内容进行查找。下图为查找bluetooth sudo dmesg |grep -i bluetooth

ufw命令简介

正文共&#xff1a;3999 字 41 图&#xff0c;预估阅读时间&#xff1a;4 分钟 我们之前在CentOS系统中研究了iptables命令的使用方法&#xff08;iptables命令简介&#xff09;&#xff0c;还做了简单的应用实验&#xff08;如何通过iptables配置URL过滤黑名单&#xff1f;、如…

DevExpress WinForms自动表单布局,创建高度可定制用户体验(二)

使用DevExpress WinForms的表单布局组件可以创建高度可定制的应用程序用户体验&#xff0c;从自动安排UI控件到按比例调整大小&#xff0c;DevExpress布局和数据布局控件都可以让您消除与基于像素表单设计相关的麻烦。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&a…

LeetCode:删除排序链表中的重复元素(C语言)

1、问题概述&#xff1a;给定一个已排序链表的头&#xff0c;删除重复元素&#xff0c;返回已排序的链表 2、示例 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&#xff1a;[1,2,3] 3…

【Python】一文向您详细介绍 K-means 算法

【Python】一文向您详细介绍 K-means 算法 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff…

set 与 map底层实现

目录 set与map底层基本介绍​ 红黑树的迭代器 operator 情况一&#xff1a;右不为空 情况二&#xff1a;右为空 operator-- 情况一&#xff1a;end()-- 情况二&#xff1a;左子树不为空 情况三&#xff1a;右子树不为空 项目代码 RBTree.h myMap.h mySet.h set与m…

TCP的socket的API

关键的两个类 1)ServerSocket 该类专门给服务器用的,这个构造方法传入端口进行连接 accept相当于是接听操作,进行连接 close关闭当前套接字,当socket对象与进程的生命周期不一致时需要提前释放资源,就需要调用close 为什么UDP的客户端服务器中没有这个close方法,因为这个sock…

Manticore Search(es轻量级替代)

概念&#xff1a; Manticore Search 是一个使用 C 开发的高性能搜索引擎&#xff0c;创建于 2017 年&#xff0c;其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx&#xff0c;显着改进了它的功能&#xff0c;修复了数百个错误&#xff0c;几乎完全重写了代码并保…

服务器数据恢复—Isilon存储集群节点误删除的数据恢复案例

Isilon存储结构&#xff1a; Isilon存储使用的是分布式文件系统OneFS。在Isilon存储集群里面每个节点均为单一的OneFS文件系统&#xff0c;所以Isilon存储在进行横向扩展的同时不会影响数据的正常使用。Isilon存储集群所有节点提供相同的功能&#xff0c;节点与节点之间没有主备…

国产大模型之光-Kimi AI

又是一年年中&#xff0c;各种工作总结、报告数不胜数&#xff0c;打工人们又面临年中绩效的考核&#xff0c;还恰逢毕业季&#xff0c;又有很多校招朋友初入职场&#xff0c;成为打工人&#xff0c;老板PUA&#xff0c;Mentor不带教&#xff0c;加班熬夜掉头发。 现在各大互联…

TCP系列(一)-介绍TCP

服务 TCP和UDP同样使用IP提供的服务&#xff0c;但是TCP提供的是面向连接&#xff0c;可靠的字节流服务 面向连接 使用TCP进行通信双方&#xff0c;必须先建立连接&#xff0c;然后进行数据交换 可靠服务 将应用数据分割成固定大小的报文段每次发出报文&#xff0c;会启动定时…

嵌入式单片机软件与硬件的结合方法分析

不知道大家有没有疑惑,为什么软件能控制硬件?关于这个问题,给出直观解释的文章:本文分析STM32单片机到底是如何软硬件结合的,分析单片机程序如何编译,运行。 软硬件结合 初学者,通常有一个困惑,就是为什么软件能控制硬件?就像当年的51,为什么只要写P1=0X55,就可以…

防近视台灯有效果吗?精选学生护眼台灯哪个品牌好

在当今快节奏的生活环境中&#xff0c;我们常常忽视了眼部休息&#xff0c;对眼睛的关爱变得尤为稀缺&#xff0c;这直接导致了近视率的逐年飙升。在这样的背景下&#xff0c;不少人将护眼需求投向防近视台灯。防近视台灯也称为护眼灯&#xff0c;护眼灯号称有独特的护眼技术&a…

spring 中的属性解析器 PropertyResolver

我们知道&#xff0c;在 spring 中可以使用占位符&#xff0c;格式如 "${}"&#xff0c;大括号中间放置待替换的占位符&#xff0c;待使用值时根据配置的属性解析器进行解析。但具体是如何操作的&#xff0c;且看本文来进行分析。 PropertyResolver 这是一个针对任…

Unity UGUI 之 图集

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是图集 精灵图…