Windows10+Qt6.9.0+OpenSSL3.2.4静态编译
2025-06-23 22:41:23 3
编译OpenSSL
https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz
环境
1. perl 5.40.2
2. nasm 2.16.01
3. vs2022
打开vs2022带的x64命令行工具
debug-dynamic
perl Configure VC-WIN64A --debug --prefix=D:/openssl-3.2.4-debug-dynamic-64 --openssldir=D:/openssl-3.2.4-debug-dynamic-64/common
release-static
perl Configure VC-WIN64A -static no-shared no-module --release --prefix=D:/openssl-3.2.4-release-static-64 --openssldir=D:/openssl-3.2.4-release-static-64/common
nmake
nmake test
nmake install
编译Qt6
环境
1. cmake 3.29.2
2. python3
3. perl 5.40.2
debug-dynamic
编译完, openssl的动态库libcrypto-3-x64.dll libssl-3-x64.dll
要复制到qt的bin目录
# 设置编码 不然后面的脚本会报错
chcp 65001
mkdir qt-build && cd qt-build
# 设置openssl的路径
set PATH=D:/openssl-3.2.4-debug-dynamic-64/bin;%PATH%
# debug+dynamic+openssl
..\configure -prefix qt-build -debug -shared -opensource -openssl-linked -- -D OPENSSL_ROOT_DIR=D:/openssl-3.2.4-debug-dynamic-64
# 并行构建
cmake --build . --parallel
cmake --install .
release-static
注意不要被strawberry
污染了环境变量
修改源码\qtbase\mkspecs\common\msvc-desktop.conf
中41-43行 将MD改为MT
chcp 65001
set PATH=D:/openssl-3.2.4-release-static-64/lib;%PATH%
set PATH=D:/openssl-3.2.4-release-static-64/include;%PATH%
set PATH=D:/openssl-3.2.4-release-static-64;%PATH%
set OPENSSL_USE_STATIC_LIBS=TRUE
set OPENSSL_MSVC_STATIC_RT=TRUE
set CMAKE_USE_OPENSSL=TRUE
set OPENSSL_ROOT_DIR=D:/openssl-3.2.4-release-static-64
mkdir qt-build && cd qt-build
..\configure -prefix qt-build -release -static -static-runtime -opensource -ssl -openssl -openssl-linked -platform win32-msvc -nomake examples -nomake tests -DOPENSSL_USE_STATIC_LIBS=TRUE -DOPENSSL_ROOT_DIR="D:/openssl-3.2.4-release-static-64" -DOPENSSL_MSVC_STATIC_RT=ON -DCMAKE_USE_OPENSSL=ON -DCMAKE_INCLUDE_PATH="D:/openssl-3.2.4-release-static-64/include" -DCMAKE_LIBRARY_PATH="D:/openssl-3.2.4-release-static-64/lib" -DCMAKE_PREFIX_PATH=qt-build
cmake --build . --parallel
cmake --install .
相对qt5, qt6需要额外的设置
1. 将openssl的libssl.lib/libcrypto.lib复制到qt的lib目录
2. vs里右键工程 Properties -> Linker -> All Options 右边列表找到 Additional Library Directories (附加库目录) 添加一项 $(QtInstallDir)/lib
demo
#include "QtWidgetsApplication5.h"
#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QDebug>
#include <QSslConfiguration>
#include <QMessageBox>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QtWidgetsApplication5 window;
window.show();
if (QSslSocket::supportsSsl()) {
QMessageBox::information(nullptr, "tips", QSslSocket::sslLibraryVersionString());
QMessageBox::information(nullptr, "tips", QSslSocket::sslLibraryBuildVersionString());
}
QNetworkAccessManager manager;
QUrl url("https://blog.22xcode.com/404");
QNetworkRequest request(url);
QNetworkReply* reply = manager.get(request);
QObject::connect(reply, &QNetworkReply::finished, [&]() {
QMessageBox::information(nullptr, "tips", reply->readAll());
reply->deleteLater();
});
return app.exec();
}
静态编译出来后, 一个exe有30.4 MB
单文件复制到其它机器运行正常