正在尝试静态编译我为 Windows 制作的 QT 程序,并在运行在更新函数使用的地址中使用 https 的更新数据库函数时不断收到错误协议"https"未知。它在通过QT Creator运行时有效,因为我安装了openssl,但是显然静态可执行文件没有适当的库来执行https。 我确实找到了这个和这个。 我在网上到处寻找解决方案,但无法找到解决方案。这是我到目前为止所做的:
在此处编辑了PowerShell脚本,以包含参数-openSSL-linked for configure.bat而不是-no-openssl
$env:SystemRootSystem32cmd.exe /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite -openssl-linked -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests"
已验证 config.summary 是否包含以下内容:
SSL支持...联系
OpenSSL支持。联系
将 openssl 库 libeay32.dll 和 libssl32.dll 和 ssleay32.dll 放在我的构建发布目录中,并在目录中编译可执行文件
将以下 QT 项目文件放入:
INCLUDEPATH += "C:\OpenSSL-Win32\include">
LIBS += -LC:\OpenSSL-Win32\lib -llibeay32 -lssleay32
然而,我没有做的一件事是,在使用 powershell 脚本的原始 QT 静态构建和使用 -openssl 链接选项的后续构建之间进行清理。 不知道这是否必要。 有什么想法吗?谢谢!
尽管configure
指出了什么,但您还没有提供足够的信息来配置它以使其将Qt与OpenSSL链接起来。
您需要在构建Qt时将其与OpenSSL链接。将以下参数传递给configure
(这是针对 Qt 5(:
-openssl-linked
-I C:OpenSSL-Win32include
-L C:OpenSSL-Win32libVCstatic
OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32 -lCrypt32"
OPENSSL_LIBS_DEBUG=-"lssleay32MTd -llibeay32MTd"
OPENSSL_LIBS_RELEASE="-lssleay32MT -llibeay32MT"
生成项目时无需传递任何特殊参数。
以上假设来自Shining Light Productions,这是Windows事实上的OpenSSL二进制供应商。
我联系了闪亮的光制作公司,他们说 mingw 没有静态库。 此外,我还通过编辑QT的powershell脚本成功进行静态构建的配置-openssl-linked -I C:/OpenSSL-Win32/include -L C:/OpenSSL-Win32/lib
(您只需要带有.exe
的openssl dll即可使其工作......