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

embedded/2024/10/22 6:07:38/

一.背景
近期项目由于对接的后台服务是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.ppmy.cn/embedded/86710.html

相关文章

玩转CSS:用ul li +JS 模拟select,避坑浏览器不兼容。

玩转CSS&#xff1a;用ul li JS 模拟select&#xff0c;避坑浏览器不兼容。 在前端的工作中&#xff0c;经常会遇到 selcet控件&#xff0c;但我们用css来写它的样式时候&#xff0c;总是不那么令人满意&#xff0c;各种浏览器不兼容啊有没有&#xff1f; 那么&#xff0c;我…

MICA:面向复杂嵌入式系统的混合关键性部署框架

背景 在嵌入式场景中&#xff0c;虽然 Linux 已经得到了广泛应用&#xff0c;但并不能覆盖所有需求&#xff0c;例如高实时、高可靠、高安全的场合。这些场合往往是实时操作系统的用武之地。有些应用场景既需要 Linux 的管理能力、丰富的生态&#xff0c;又需要实时操作系统的高…

Boost搜索引擎:关键词搜索模块的构建

关键词搜索模块是基于索引构建模块编写的。 搜索模块&#xff1a; 搜索模块是在服务器构建索引之后进行的&#xff0c;在构建好的索引的服务器上进行关键词搜索。 首先将用户提供的搜索内容进行&#xff0c;关键词分割&#xff0c;将分割好的关键词存放到一个数组中&#xf…

爬职业热度--兼职cat

免责声明:本文仅做技术交流与学习...请勿不正当使用... 循环页数爬取 import pandas as pd import requests from lxml import etree # 初始化一个空的 DataFrame df pd.DataFrame() data_list []headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Wi…

(数据结构)二叉树

1.树型结构 1.1.概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有…

xLua | xLua Framework | 1 打包

0. 热更新做什么 1、资源 热更资源和热更步骤&#xff08;Bundle&#xff09; 2、代码 Lua与C#的交互&#xff08;xLua&#xff09; 3、框架开发流程第一阶段&#xff1a;Bundle处理 构建&#xff1b;加载&#xff1b;更新第二阶段&#xff1a;C#调用Lua Lua加载与管理 Lua绑…

JMeter接口测试:测试中奖概率!

介绍 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测试。JMeter 最初被设计用于 Web 应用测试&#xff0c;但后来扩展到了其他测试领域&#xff0c;可用于测试静态和动态资源&#xff0c;如静态文件、Java 小服务程序、CGI 脚本、J…

linux mysql 添加环境变量

要在Linux上添加MySQL的环境变量&#xff0c;可以按照以下步骤进行操作&#xff1a;打开终端窗口。使用文本编辑器&#xff08;如vi或nano&#xff09;打开~/.bashrc文件&#xff1a;vi ~/.bashrc或nano ~/.bashrc在文件的末尾添加以下内容&#xff1a;export PATH$PATH:/path/…