使用具有OpenSSL支持的Qt创建独立的二进制文件

时间:2019-10-14 16:03:53

标签: c++ qt ssl openssl static-linking

我需要创建一个具有OpenSSL支持的独立二进制应用程序。为了开发,我使用的是Qt Framework。

我遇到的问题是在测试机上测试应用程序时,我没有SSL支持。

我做了什么应该问我没有尝试过什么):

我用从here下载的OpenSSL 1.1.1d编译了Qt(使用不同的配置选项重新编译了大约15次,每次编译大约需要6个小时-浪费了很多时间。)

要编译静态Qt,我一直在使用this脚本(从Qt的this脚本略作改编,以包括所使用的线程数并指定OpenSSL HOME)。

M ain配置选项是

cmd /C "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
        -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -sql-sqlite -ssl -openssl -I $($OPENSSL_HOME)\include -L$($OPENSSL_HOME)\lib\MinGW`
        -opensource -confirm-license `
        -make libs -nomake tools -nomake examples -nomake tests -v"
    cmd /C "mingw32-make -k -j$($threads)"

OpenSSL_HOME目录布局

    Directory: C:\OpenSSL\OpenSSL-Win32


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2019/09/30     07:27                bin
d-----       2019/09/30     07:27                exp
d-----       2019/09/30     07:27                include
d-----       2019/09/30     07:27                lib
d-----       2019/09/30     07:27                tests
-a----       2019/09/11     18:10             89 acknowledgements.txt
-a----       2019/09/11     18:10            752 authors.txt
-a----       2019/09/11     18:10         596279 changes.txt
-a----       2019/09/11     18:10           6408 c_rehash.pl
-a----       2019/09/11     18:10             86 faq.txt
-a----       2019/09/11     18:10        2515456 libcrypto-1_1.dll
-a----       2019/09/11     18:10         530432 libssl-1_1.dll
-a----       2019/09/11     18:10           6246 license.txt
-a----       2019/09/11     18:10          43136 news.txt
-a----       2019/09/11     18:10           3251 readme.txt
-a----       2019/09/30     07:27          96904 unins000.dat
-a----       2019/09/30     07:26         730789 unins000.exe

Directory: C:\OpenSSL\OpenSSL-Win32\lib

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2019/09/30     07:27                MinGW
d-----       2019/09/30     07:27                VC
-a----       2019/09/11     18:10           1840 capi.lib
-a----       2019/09/11     18:10           1866 dasync.lib
-a----       2019/09/11     18:10         985224 libapps.lib
-a----       2019/09/11     18:10         109020 libcrypto.def
-a----       2019/09/11     18:10        1013446 libcrypto.lib
-a----       2019/09/11     18:10       34718436 libcrypto_static.lib
-a----       2019/09/11     18:10          14033 libssl.def
-a----       2019/09/11     18:10         122290 libssl.lib
-a----       2019/09/11     18:10        7058838 libssl_static.lib
-a----       2019/09/11     18:10         448842 libtestutil.lib
-a----       2019/09/11     18:10           1734 openssl.lib
-a----       2019/09/11     18:10           1892 ossltest.lib
-a----       2019/09/11     18:10           1880 padlock.lib
-a----       2019/09/11     18:10           1722 uitest.lib

Directory: C:\OpenSSL\OpenSSL-Win32\lib\MinGW

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019/09/11     18:11        3347286 libcrypto.a
-a----       2019/09/11     18:10         109020 libcrypto.def
-a----       2019/09/11     18:11         385126 libssl.a
-a----       2019/09/11     18:10          14033 libssl.def

在全新的Windows 7/10安装上运行独立的.exe时,调用QSslSocket::supportSsl()具有以下效果。

  • 此文件已在OpenSSL版本 1.0.2g / p 中使用OpenSSL 在路径中(cmd路径)进行了测试。 SSL支持返回false

  • 我的开发PC已安装 1.1.1d ,但在路径(cmd路径)中打开了,但对于SSL支持返回true。 计算机支持SSL

  • 使用静态Qt工具包(也内置了静态Qt)构建机器的 OpenSSL 1.0.2g仅在路径中计算机支持SSL 。 除了在装有OpenSSL 1.1.1d的开发PC上。这台机器与上面测试过的机器之间的区别在于,Qt Creator是通过提供的链接安装的OpenSSL安装的。

在我的项目中,每次构建希望时,我都添加到.pro文件中,这会(没有帮助)

INCLUDEPATH += "C:\OpenSSL\OpenSSL-Win32\include"
LIBS += -L"C:\OpenSSL\OpenSSL-Win32\lib\MinGW\libssl.a"
LIBS += -L"C:\OpenSSL\OpenSSL-Win32\lib\MinGW\libcrypto.a"

我尝试了使用OpenSSL -Includes和-Libs&编译每个版本的静态Qt的各种方法,尝试链接到静态VC OpenSSL库,MinGW库和*.dlls,但似乎无济于事。 / p>

我精疲力尽,没什么可尝试的。在解决这个问题上,我确实需要帮助。

0 个答案:

没有答案