背景:項目中使用的Qt環境不支持https請求,原因是 源碼編譯的時候沒有鏈接相應的ssl庫文件。需要重新編譯qt
第一步 先編譯Openssl
1)安裝perl,並配置環境變量
下載地址:
http://downloads.activestate.com/ActivePerl/releases/5.26.1.2601/ActivePerl-5.26.1.2601-MSWin32-x64-404865.exe
2)下載Openssl源碼https://www.openssl.org/source/
找到相應的版本,我用的是openssl-1.0.2l
解壓文件後,用 vs2017命令行工具cd到相應目錄
perl Configure VC-WIN32 no-asm --prefix=D:\QtAddSsl\OpenSSL
D:\QtAddSsl\OpenSSL是編譯後的目錄
其中VC-WIN32是對應平臺,如果是64位的話就是VC-WIN64A(當然,如果你要用得是英特爾的安騰系列64位處理器的話就是VC-WIN64I了,但是我想應該沒有人用……),no-asm的意思是不使用匯編代碼,如果用的話會出現許多奇奇怪怪的問題。–prefix參數指定的是最後的安裝目錄
下一步:
ms\do_ms
因爲我們是靜態編譯,所以輸入
nmake -f ms\nt.mak
爲了驗證可以輸入
nmake -f ms\nt.mak test
看到passed all tests的話說明沒有問題,可以繼續,輸入
nmake -f ms\nt.mak install
完成openssl的編譯
這樣會在
D:\QtAddSsl\OpenSSL\lib
目錄下生成
libeay32.lib ssleay32.lib
第二步 :編譯QT
1:安裝qt-opensource-windows-x86-msvc2015-5.6.3.exe,需要勾選Source Components
2:修改\Qt5.6.3\5.6.3\Src\qtbase\mkspecs\common\msvc-desktop.conf文件:
將
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
改爲
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
3.編譯安裝qt,在configure命令中,prefix參數值爲編譯安裝目錄。這裏編譯出來的是動態庫。編譯時間大約在3,4個小時左右
打開開始菜單中"Visual Studio 2017"中的"VS 2017的開發人員命令提示符",輸入以下命令:
cd \Qt5.6.3\5.6.3\Src
configure -confirm-license -opensource -platform win32-msvc2015 -debug-and-release -shared -target xp -prefix “E:\Qt-msvc2015-shared-mt-addSsl” -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32 -lGdi32 -lUser32" -no-qml-debug -no-angle -nomake tests -nomake examples
nmake && nmake install
ps: OPENSSL_LIBS="-lssleay32 -llibeay32 -lGdi32 -lUser32"
這幾個庫文件,要在環境變量LIB裏面
疑惑的地方:
- 源碼編譯qt的時候,
爲了編譯進 ssl,用到如下命令
OPENSSL_LIBS="-lssleay32 -llibeay32 -lGdi32 -lUser32"
但是 像Gdi32 User32 在windows上 有好多版本,到底用哪個呢? 而且 是否需要 將這些lib文件所在目錄加入到環境變量呢?
參考:
https://blog.csdn.net/qazxdrcssc2006/article/details/73497226