1、VS2010编译OpenSSL

2、VS2010编译zlib

4、配置编译libcurl_openssl_zlib得到的静态库便于使用

3.1 下载libcurl源码

下载地址:https://curl.haxx.se/download.html

这里下载的是curl-7.63.0.zip。

3.2 编译libcurl_openssl_zlib

解压到E盘,在目录E:\curl-7.63.0\projects\Windows\VC10下,使用VS2010打开解决方案curl-all.sln。

在配置选项中找不到同时支持openssl和zlib静态库的选项,如下图:

但是有选项LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL,下面就在这两个配置选项中修改,使得支持zlib。

分别选择LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL,配置项目libcurl及curl的字符集为UNICODE,如下图:

配置libcurl库支持ZLIB,分别选择LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL,在libcurl项目属性中预处理器中增加HAVE_ZLIB_H,HAVE_ZLIB,ZLIB_WINAPI,如下图所示:

配置libcurl库不生成pdb文件,分别选择LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL,在libcurl项目属性中C/C++->General中的Debug information Format选择C7…,如下图所示:

配置curl支持ZLIB库,分别选择LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL,在curl项目属性中预处理器中增加ZLIB_WINAPI,如下图所示:

到这里在LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL下,libcurl和curl已经支持了ZLIB库。如果此时编译libcurl,会发现报zlib库及openssl库头文件找不到,如下图:

这是因为尚未把之前编译好的openssl及zlib包含进来。

打开E:\curl-7.63.0\winbuild\BUILD.WINDOWS.txt文件,如下图所示:

按上图方式在E盘建立目录结构,如下:

把之前编译openssl和zlib得到的头文件拷贝到include目录下,如下图:

此时再次编译libcurl项目,发现仍然是上述头文件找不到的错误,可以肯定是编译时找不到E:\deps\include目录,文档中可能是命令行方式是编译需要的相对目录结构,这里直接把E:\deps\include分别添加到LIB Debug – LIB OpenSSL和LIB Release – LIB OpenSSL下的附加包含目录配置项中,如下图所示:

再次编译libcurl项目,发现正确编译通过,且在目录E:\curl-7.63.0\build\Win32\VC10\LIB Debug – LIB OpenSSL下生成的静态库文件libcurld.lib,如下图所示:

接着编译curl项目,发现提示错误,有找不到的静态库,这是因为找不到需要的的openssl及zlib库,查看项目配置属性当前的运行时库为/MDd,把之前编译好的/MDd运行时库下的openssl及zlib库拷贝到目录E:\deps\lib下,去掉库文件的_MDd后缀,如下图所示:

再次编译curl项目,发现仍然找不到静态库,这说明找不到库所在的目录E:\deps\lib,这里直接把目录E:\deps\lib添加到curl项目的附加库目录配置项中,如下图所示:

再次编译curl项目,发现正确编译通过,在目录E:\curl-7.63.0\build\Win32\VC10\LIB Debug – LIB OpenSSL下生成的curld.exe文件。

到此运行时库/MDd下的LIB Debug – LIB OpenSSL编译完成。

在配置项LIB Debug – LIB OpenSSL下分别选择运行时库/MTd和/MDd编译;

在配置项LIB Release – LIB OpenSSL下分别选择运行时库/MT和/MD编译;

编译得到的文件最好加上相应的运行时库作为后缀,便于后续使用区分。