Qt應用中,經常有需要用到SSL的地方,例如XMPP等。Qt SDK中的Qt支持SSL,而單獨下載的Qt library則一般不帶SSL。如果需要SSL支持則需要我們自己編譯。
1.安裝Perl
機器上必須先安裝Perl,無論編譯OpenSSL還是Qt,都需要Perl的支持。Windows上可以安裝這個http://strawberryperl.com/
2. 編譯OpenSSL
到OpenSSL的網站http://www.openssl.org/source/下載最新的OpenSSL代碼:openssl-1.0.1c
將代碼解壓后,根目錄中有一個INSTALL.W32的文件,里面就是Windows下的編譯方法。
啟動VS2012工具命令行,在開始菜單Microsoft Visual Studio 2012\Visual Studio Tools這個目錄下,該目錄下有多個命令行,我選擇的是“VS2012 x86 本機工具命令提示”這一個。
# 首先,切換到Openssl代碼的根目錄
> cd openssl\source\path
# 如果你安裝了NASM,可以用匯編的形式編譯,以加快Openssl的運行速度 # 執行下面兩句 > perl Configure VC-WIN32 --prefix=d:\library\openssl > ms\do_nasm # 如果不想使用匯編編譯,則執行下面兩句就可以 # --prefix是指定你要把OpenSSL安裝的位置 > perl Configure VC-WIN32 no-asm --prefix=d:\library\openssl > ms\do_ms # 開始編譯 > nmake -f ms\ntdll.mak # 安裝到prefix指定的目錄中 > nmake -f ms\ntdll.mak install
3. 編譯 Qt 4.8.3
到http://qt-project.org/downloads下載Qt4.8.3的代碼,注意不要下libraries,下source code.或者直接點這個下載qt-everywhere-opensource-src-4.8.3.tar.gz
3.1 修改MAKESPEC
Qt4.8.3中並沒有VS2012的MAKESPEC。我們修改一下VS2010的MAKESPEC,用它來代替VS2012.
打開Qt代碼根目錄下的\mkspecs\win32-msvc2010\qmake.conf這個文件。
把其中的 QMAKE_COMPILER_DEFINES += _MSC_VER=1600 WIN32 替換為 QMAKE_COMPILER_DEFINES += _MSC_VER=1700 WIN32
3.2 修正Webkit編譯的問題
Webkit庫中有一個HashSet.h的文件會導致編譯失敗,Stack Overflow上有人給出了解決辦法在這里。
將Qt根目錄下的src\3rdparty\webkit\Source\JavaScriptCore\wtf\HashSet.h這個文件替換為這個文件的內容。
另外一個編譯的問題是src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp這個文件提示“常量中有換行符”
// 打開這個文件會會發現第327行 “<selection>”的引號是全角的,而文件編碼是UTF8,不帶bomb的 return WEB_UI_STRING("Look Up “<selection>”", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString)); // 替換為 return WEB_UI_STRING("Look Up \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
3.3 編譯Qt
完成以上准備工作后就可以進入VS2012命令行進行Qt的編譯工作了。
# 切換到Qt代碼的根目錄 > cd qt\source\dir # 執行configure # 如果找不到configure,那你一定是切換到了錯誤的目錄 # 最后的-I 和 -L 表示使用我們前面編譯的Openssl庫 > configure -mp -opensource -nomake demos -nomake examples -platform win32-msvc2010 -openssl -I D:\library\openssl\include -L D:\library\openssl\lib # 在提示Copyright的時候選擇 y # configure完成后,如果一切正常,會提示你nmake, # 這時nmake編譯即可 > nmake
# 耐心等待一兩個小時吧。編譯時間到了。
4 測試一下
這里有一個使用Qt和Ssl,server和client端的例子 https://github.com/e7868a/qt-ssl
