您好我正在尝试编译我为Windows静态编写的QT程序并继续获取错误协议“https”在运行更新数据库函数时未知,该函数在更新函数使用的地址中使用https。它在QT Creator中运行,因为我安装了openssl,但显然静态可执行文件没有适当的库来执行https。我找到了this和this。我试图寻找一个解决方案而不是网络。这是我到目前为止所做的:
编辑了powershell脚本here,为configure.bat包含参数-openssl-linked而不是-no-openssl
$env:SystemRoot\System32\cmd.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 libraries libeay32.dll和libssl32.dll以及ssleay32.dll放入我的构建版本目录中,并在目录中编译可执行文件
将以下qt项目文件:
INCLUDEPATH + =“C:\ OpenSSL-Win32 \ include”
LIBS + = -LC:\ OpenSSL-Win32 \ lib -llibeay32 -lssleay32
然而,我没有做的一件事是使用powershell脚本进行原始QT静态构建和使用-openssl-linked选项进行后续构建之间的干净。不知道是否有必要。有任何想法吗?谢谢!
答案 0 :(得分:2)
尽管configure
指示了什么,但您没有提供足够的信息来配置让它将Qt与OpenSSL链接。
您需要在构建时将Qt与OpenSSL链接。将以下参数传递给configure
(这适用于Qt 5):
-openssl-linked
-I C:\OpenSSL-Win32\include
-L C:\OpenSSL-Win32\lib\VC\static
OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32 -lCrypt32"
OPENSSL_LIBS_DEBUG=-"lssleay32MTd -llibeay32MTd"
OPENSSL_LIBS_RELEASE="-lssleay32MT -llibeay32MT"
构建项目时不需要传递任何特殊参数。
以上假设来自Shining Light Productions的构建,这是Windows的事实上的OpenSSL二进制提供程序。
答案 1 :(得分:-1)
我联系了Shining Light Productions,他们说mingw没有静态库。另外,我通过编辑QT的powershell脚本来成功进行静态构建(-openssl-linked -I C:/OpenSSL-Win32/include -L C:/OpenSSL-Win32/lib
,只需要使用.exe
的openssl dll就可以工作......)。