VS2012 + Qt 4.8.3 + OpenSSL

Qt 应用中,经常有需要用到 SSL 的地方,例如 XMPP 等。Qt SDK 中的 Qt 支持 SSL,而单独下载的 Qt library 则一般不带 SSL,如果需要 SSL 支持则需要我们自己编译。本文主要介绍使用 VS2012 编译 OpenSSl 和 Qt 4.8.3。

1.安装Perl

首先,无论编译 OpenSSL 还是 Qt,都需要 Perl 的支持,必须先安装 Perl 。Windows 上可以安装这个 http://strawberryperl.com/

2. 编译OpenSSL

到 OpenSSL 网站下载最新的OpenSSL代码:openssl-1.0.1c

将代码解压后,根目录中有一个 INSTALL.W32 文件,里面就是 Windows 下的编译方法。

启动 VS2012 工具命令行,在开始菜单 Microsoft Visual Studio 2012\Visual Studio Tools 这个目录下,该目录下有多个命令行,我们选择 “VS2012 x86 本机工具命令提示” 这一个。

:: 首先,切换到 Openssl 代码的根目录
cd openssl\source\path

:: openssl 有两种编译方式
:: 如果你安装了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