基于MSVC2017+OpenSSL1.0.2j的Qt5.12.0 for arcGIS Qt SDK动态编译

QT MingGW静态编译遇到的error: openssl-linked坑 QT MingGW静态编译遇到的error: openssl-linked坑 用qt 5.14.2进行MinGW静态编译,一直碰到这个问题:ERROR: Feature ‘openssl-linked’ was enabled, but the pre-condition ‘!features.securetransport && libs.openssl’ failed. 使用了下面的命令,在qt5.13.0 win32的cmd中,openssl 1.1.1d可以正常使用。感觉能支持的o 阅读详情

1.起因

最近研究了arcGIS SDK for Qt,发现直接从官网下的Qt5.12二进制包不能直接用,从arcGIS模板新建的工程都会提示很多错误:

qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error

Google之后发现主要问题是Qt官方发布的二进制包出于授权的原因,没有链接OpenSSL的库(虽然bin目录里其实是有OpenSSL需要的两个dll的),在代码里输入下面3.4节的代码,出来的果然是不支持OpenSSL,需要自己从源代码里编译链接有OpenSSL的Qt才行。
kG0MRS.png

PS: 折腾了两天成功编译了Qt之后,发现其实只要编译下OpenSSL,然后把编译好的OpenSSL的bin目录加入到系统Path变量里去,官方发布的二进制Qt其实就可以用了……吐血啊,不过自己编译了下Qt还是很有收获的,如果不是为了arcGIS,做一次静态编译出来的exe可以少带很多dll。

2.准备工作

2.1 软件环境

编译Qt需要很多工具,本人很反感装太多东西到C盘去,因此下面的工具除了必须的VS2017安装了之外,其他的都是绿色版,只要把这个工具路径加入到Path里去就可以了,完全没有问题。清单如下:

  1. MSVC2017 Community版(记得勾选上Win10 SDK)
  2. WinDbg,MS没有自带的话官网下载
  3. ActivePerl
  4. Ruby
  5. Python
  6. OpenSSL 1.0.2j
  7. Qt5.12.0源代码
    在D盘新建一个目录,存放所有需要的内容,整个编译的目录结构如下:
    Qt-Build
    – openssl-1.0.2j
    ---- OpenSSL64
    – Perl64
    – Python27
    – Ruby26-x64
    – qt-everywhere-src-5.12.0
    注意openssl-1.0.2j目录下自己新建了一个OpenSSL64文件夹,用于存放编译好的OpenSSL的两个dll。

3.2 加入环境变量

把上面的Perl,Python,Ruby的bin目录都加入到系统Path里去。

3.3 检查配置

在命令行里分别执行下面几个命令,

perl -v
Python -v
Ruby -v

如果都正常的话即可进入正题。

3.编译Qt5.12

3.1编译OpenSSL1.0.2j

  1. 打开开始菜单-msvc2017-适用于VC2017的X64本机工具
  2. cd命令到openssl-1.0.2j下
  3. perl Configure VC-WIN64A no-asm --prefix=D:/Qt-Build/openssl-1.0.2j/OpenSSL64
  4. 系统会检查编译配置是否正确,正确的话会输出Configuring for VC-WINA,确认有这句有输入命令ms\do_win64a
  5. 接着就可以编译了,输入nmake -f ms\ntdll.mak
  6. 等大概7,8分钟编译完成,我在编译过程中提升过几次Permision deny,没找到什么原因,继续输入上面的编译命令不管他,最后还是过了。
  7. 完成之后输入命令nmake -f ms\ntdll.mak test
  8. 系统测试完成后nmake -f ms\ntdll.mak install
  9. 这样就编译完成编译OpenSSL。

3.2 编译Qt

  1. 还是打开开始菜单-msvc2017-适用于VC2017的X64本机工具
  2. cd命令到openssl-1.0.2j下D:\Qt-Build\qt-everywhere-src-5.12.0目录下,注意很多教程让我们修改\qtbase\mkspecs\common目录下msvc-desktop.conf这个文件里的编译选项QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd 为 -MT,-MTd,对我们这个Qt for arcGIS SDK来说是不需要的,因为arcGIS的SDK就是需要动态链接,而是不是改了之后的静态链接。
  3. 执行命令configure -platform win32-msvc2017 -opensource -confirm-license -prefix D:\Qt-Build\build-Qt5.12.0-msvc-64bit-dynamic -debug-and-release -opengl desktop -openssl-linked OPENSSL_PREFIX=D:\Qt-Build\openssl-1.0.2j\OpenSSL64 OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32 -llibeay32 -lssleay32" -nomake examples -nomake tests -no-direct2d -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdeclarative -skip qtdoc -skip qtgamepad -skip qtgraphicaleffects -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtscript -skip qtscxml -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsvg -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns 注意build-Qt5.12.0-msvc-64bit-dynamic是最后输出结果文件夹,可以不创建,系统会自动生成,另外qtsensor和qtpositioning两个模块一定要带上,不能skip掉。
  4. 等待系统配置,注意查看OpenSSL有没有变成yes
  5. 所有的都配置好后
  6. 输入命令nmake吧,等待大约1小时。
  7. 没有提示错误的话就输入命令nmake install系统就会把编译好的拷贝到上面设定的目录build-Qt5.12.0-msvc-64bit-dynamic中去。
  8. 编译完成

3.3 配置Qt Creator

编译完成后还需要到Creator里配置这个新生成的库。

  1. 工具-选项-左侧选择构建和运行-右侧选择构建套件-添加
  2. 在下面出现的表格里填写上自己起的刚编译好的套件名称,我起的是Desktop Qt 5.12.0 MSVC2017 64 bit For arcGIS。
  3. 编译器选择amd64的.
  4. 调试器选择X64的 kGwY9O.png
  5. Qt版本里点击右侧manage,选择刚生成的目录下的qmake.exe kGwG4K.png

3.4 检查

新建一个arcGIS的Qt工程,输入代码检查是否已经支持OpenSSL

qDebug()<< QSslSocket::supportsSsl()<<QSslSocket::sslLibraryBuildVersionString()
            <<QSslSocket::sslLibraryVersionString();

控制台输出正确信息
kGwDEt.md.png
至此,全部编译结束。

参考文献

  1. 用MSVC2015编译Qt5.6(包含openssl、webengine)
  2. 静态编译OpenSSL并整合到Qt
用MSVC2015编译Qt5.6(包含openssl、webengine) 依赖的开发工具 Visual Studio 2015,这个没什么好说的。 ActivePerl Python 2.7 Ruby 依赖的三方库 icu 解压即用,比如解压到C:\icu4c openssl PS: 不要以为版本号看起来更高就下载那个openssl-1.0.2h.tar.gz,该版本不兼容! 编译openssl 解压下载的openssl源码,比如解压到C:\openssl-1 阅读详情

相关推荐

嵌入式中Qt5.7.1添加支持openssl方法

一定要选对Qt版本对应的openssl版本,由于开始选的openssl版本不对,导致编译Qt时出现很多错误。然后再把openssl相关的库libssl、libcrypto放在目标板下。将新生成的libQt5NetWork。版本:openssl-1.0.2g。

嵌入式技术开发 1220

BUG: QT5.12.X静态编译中使用-openssl-linked选项报错

最近我在编译开源telegram时候用到了openssl1.1.1, 然而在QT5.12.5 进行静态链接OPENSSL库文件时候报错: ERROR: Feature 'openssl-linked' was enabled, but the pre-condition '!features.securetransport && libs.openssl' failed. 而同...

robinfoxnan的专栏 3452

Qt5.15.2静态编译 VS2017 with static OpenSSL

Qt 5.15.2静态编译 VS2017 with static OpenSSL

草上爬的博客 3481

使用 openssl 进行 https 请求的步骤

使用 openssl 进行 https 请求的步骤如下: 1、创建SSL_CTX SSL_CTX_new(SSLv23_method()) 2、创建SSL SSL_new([SSL_CTX]) 3、绑定 socket SSL_set_fd([SSL], [socket]) 4、建立连接 SSL_connect([SSL]) 5、发送数据 SSL_write([SSL],request,request_...

QCZL_CC的博客 2608

QT5.13.0 MSVC2017_64编译器 + MySQL 8.0.19 release版驱动 64位

QT5.13.0 MSVC2017_64编译器 + MySQL 8.0.19 release版驱动 64位 release版亲测能用 debug版没试 不知道能不能行

VLC-Qt 5.12.4 msvc2017x64编译版本

Qt-VLC编译好的版本,直接将包解压放到qt安装目录就可以直接使用,省去了你自己找库编译的时间,喜欢的拿走吧

麒麟 linux https qt 支持

怎么手把手支持

jijie_ming的博客 740

PCI-Express、MiniPCIe、ExpressCard接口转换说明/引脚互换关系

通过引脚PIN互换可以在PCI-Express、MiniPCIe、ExpressCard之间切换不同的接口;提供接口引脚表和标准尺寸图。

tech34的博客 7123

Qt中使用OpenSSL

在Qt中使用OpenSSL的时候,我在网上下载了OpenSSL,找了网上各种版本的OpenSSL的DLL放到程序中都不能用。最后使用QString version = QSslSocket::sslLibraryVersionString();这个函数发现是OpenSSL的版本不一致导致的,后面在网上下载了相应的OpenSSL的版本进行编译。我是下载了OpenSSL1.0.2的版本。编译的方式可以见链接: (5条消息) win10 vs2015 openssl-1.0.2j编译_一朵花开的时间-优快云博

u014582865的博客 987

Windows 24H2下eNSP AR_40启动失败的终极修复指南

本文针对Windows 11 24H2更新后eNSP AR_40路由器启动失败的问题,提供了终极修复方案。核心在于解决系统强制虚拟化安全(VBS/Hyper-V)与老版模拟软件的兼容性冲突。指南详细介绍了安装关键系统更新KB5053656、精细调整Windows虚拟化功能以及后续排错步骤,帮助用户在24H2系统上稳定运行eNSP进行网络实验。

weixin_29233333的博客 507

数学建模传染病模型_【数学建模】之传染病模型

点击【拇指笔记】,关注我的公众号。SE模型缺点:没有考虑接触到的人中还有一部分病人,所以所有人并不会全部被感染。建立模型:已感染人数(病人)每个病人每天有效接触(足以使人致病)人数为根据(1)(2)可以建立模型:等式两边同时除以\Delta t由导数定义有同时,取\Delta t = 1天由(1)(5)两式可得最终的模型:Logistic模型缺点:区分已感染者(病人)和未感染者(健康人)...

weixin_39590453的博客 2227

openssl编译后的html有用么,Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)...

When compiling Qt you can choose one of these options based on the configure command line:no OpenSSL support (-no-openssl)QtNetwork dynamically opening OpenSSL libs (-openssl; default)QtNetwork linkin...

weixin_32632831的博客 174

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 554

Feature ‘openssl-linked‘ was enabled, but the pre-condition ‘!features.securetransport && !features.

./configure -static -static-runtime -openssl-linked Note: Also available for Linux: linux-clang linux-icc Note: Using static linking will disable the use of dynamically loaded plugins. Make sure to import all needed static plugins, or compile needed mo.

hknaruto的专栏 6762

超详细YOLOv8目标检测全程概述:环境、训练、验证与预测详解

这篇博文提供了一个关于使用YOLOv8进行目标检测的全面指南,包括环境搭建、模型训练、验证和预测的详细步骤,以及如何解释训练过程中生成的各种图表和数据。整篇文章为读者提供了一个关于如何利用YOLOv8进行目标检测的实践指南,从环境搭建到模型部署,再到结果分析,每一部分都给出了详细的步骤和解释。此外,还有对于模型输出的解释,帮助读者更好地理解和使用YOLOv8模型。

CDBmax的博客 10万+

【完美解决】Anaconda3安装后缺失大量文件,没有scripts、Library等目录

Anaconda3是官网下载的:https://www.anaconda.com/distribution/#download-section 我选择的是64位python 3.7的版本。 问题出现及现象: 我自己选择了一个D盘的目录D:\Tools\Anaconda3进行安装,装完后发现conda list命令无法执行,首先都到的是配置环境变量,然后发现安装目录下缺失大量文件(如下图)...

android之行 3万+

Qt And Openssl交叉编译

1. Openssl交叉编译 Openssl交叉编译 2. Qt交叉编译链接Openssl Qt的交叉编译参考Qt交叉编译,只是需要修改一下configure的配置参数,具体配置如下: #!/bin/sh OPENSSL_LIBS='-L/home/pgs/openssl102_Arm/lib -lssl -lcrypto' \ ./configure \ -openssl-linked \ -I/home/pgs/openssl102_Arm/include \ -L'/home/pgs/op

潘森的博客 1774

企业微信——智能表格学习

企业微信报表

qq_15138049的博客 1万+

Qt —— 手动编译Qt源码(附带编译openssl库)

一、手动编译openssl 如果你不需要openssl的话,这一部分可以跳过。 我的版本是:openssl1.1.1d 下载地址:https://www.openssl.org/source/ 1. 准备工作 下载openssl并解压,下载perl、nasm并安装。 perl和nasm安装好后检查一下环境变量,有没有自动添...

zhounixing的博客 6754

把表的每一次改动都记下来:SAP 表变更日志 DBTABLOG/DBTABPRT 与 SCU3 全面解析

摘要:SAP系统提供了数据库表变更日志功能(SCU3/DBTABLOG),用于追踪关键配置表的变更历史。该功能通过profile参数rec/client和表级技术设置双重开关控制,能记录谁在何时修改了哪些数据。与业务变更凭证(CDHDR/CDPOS)和应用日志(SLG1)不同,表变更日志提供技术层面的审计线索,适用于快速定位生产事故中的异常数据变更。但需注意其限制:不支持超宽表和大批量变更,且可能引发性能问题。建议将表变更日志与业务变更凭证、应用日志结合使用,构建完整的审计追踪体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1690

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Qt4+openssl的编译

适合需要 shared+static 共存的人参考,其余情况,官方手册应该是最好的。VC最好从VC提供的控制台启动,自己打开的VC终端,可能会因为环境变量不全引起编译错误,光设置PATH环境变量没有用。建议执行一次 vcvarsall.bat 初始化环境变量。官方终端打开的是:%comspec% /k ""C:/software/Microsoft Visual Studio 9.0/VC/vcv

HalsonHe的专栏 7754

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

windows上Qt5.15+openssl1.1.1+msvs2022静态编译32位版本的笔记

qt5.15.2 编译openssl

zp33 2427

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

关于Qt5.14.2中的构建套件MSVC2017无法使用的问题

安装后我们随意建一个工程会发现使用mingw编译是可以编译过且能生成exe文件的,但是可能会遇到使用msvc构建无效的情况,详情是出现很多的链接错误LINK2019和LINK2001,这种情况大概率是环境没配置好。这就产生了版本不兼容的问题。或许有开发者会尝试在 vs 的单个组件里面添加 msvc v141 版本,但根据我的亲身经历,这样做之后问题仍然无法解决。在 Qt 的众多版本中,5.14.2 因为 5.15 之后的版本需要在线安装,成为了许多开发者进行离线安装的热门选择。

Voyage_ghost的博客 683

ubuntu20.04安装QT5.12.12, 并配置QT-ROS

打开QT create,选择帮助-关于插件-Install Plugin,然后选择下载的插件0.4.3。1、下载并安装QT5.12.12。4、QT create导入插件。2、下载QT-ROS插件。

wonderfuliy的博客 1918

arm-linux使用qt开发并加入openssl

想在arm的qt上运行websocket,发现如果没有移植openssl的话,会报错 QSslSocket has not been declared 于是准备openssl的移植和重新编译arm平台的qt5.12.9 QT版本是5.12.9 qt-everywhere-src-5.12.9 ubuntu是1604x64 openssl使用openssl-1.1.1m 交叉编译器是gcc-linaro-4.9.4-2017.01-x84_64_arm-linux-gnueabihf arm芯片是imx6u

prophet23的博客 3522

最清晰Qt与JS通过qwebchannel交互例子

tags: Qt javascript qwebchannel QWebEngineView 由来 在Qt平台上有很多很棒的图表控件,比如QWT,QCustomPlot,以及Qt5.5以后自带的QChart,但与JS网页端的各种绚丽效果控件比,还是差了不少。这次就是打算把百度出品的EChart控件应用在Qt端。 而在这样的跨平台调用中,很多文章都写的含糊其词,让人晕头转向,于是写一篇记录下最清晰...

小猿一枚的专栏 3万+
上一篇: QCustomPlot鼠标跟随显示坐标值
下一篇: 最清晰Qt与JS通过qwebchannel交互例子
洗洗睡去
博客等级 码龄19年 277粉丝 90原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值