编译Libcurl库-Windows平台

 

一、源码下载

在这里https://github.com/curl/curl下载源码,注意选择分支,目前使用的分支为7.59.0;

也可以在https://curl.haxx.se/download.html 下载。

二、初始化源代码

进入到下载的源码文件夹中,执行curl/projects文件下generate.bat,生成一个windows文件,文件夹下面有VS的工程,我选择的VS14。

 编译Libcurl库-Windows平台

三、编译不需要加密层(TLS/SSL)版

1. 打开curl-all.sln工程

编译Libcurl库-Windows平台

2. 选择不同的编译工程

编译Libcurl库-Windows平台

3、如果不需要OpenSSL 和 SSH2 两个库,直接选择LIB Release执行(或者LIB Debug),执行成功了。不能支持https协议。

编译Libcurl库-Windows平台

四、编译需要加密层(TLS/SSL)支持HTTPS协议

1. 也需要先初始化源代码。

执行curl/projects文件下generate.bat

2. libcurl发送https请求,依赖于OpenSSL。

(1)编译Openssl源码。得到.lib,.dll,.h 三类文件。

(2)将这三类文件放到Libcurl的同级目录下

         D:\dev\vs\code\
                                 |__curl-src 
                                 |    |_winbuild
                                 |
                                 |__deps
                                   |_ lib
                                   |_ include
                                   |_ bin

                这里需要新建deps文件夹,注意deps文件夹和curl源码是同一级的。

3.复制路径

    进入curl文件夹中的“winbuild”文件夹,并复制其文件夹路径,例如:D:\dev\vs\code\curl_src\winbuild

4.启动命令行

打开开始菜单,找到vs2017,编译64位,选择"适用于 VS 2017 的 x64 本机工具命令提示",编译32位,选择"适用于 VS 2017 的 x86 本机工具命令提示",这里使用64位为例,  右键以管理员身份运行,进入到命令行中,输入命令: cd  /d  D:\dev\vs\code\curl_src\winbuild,进入到此目录

编译Libcurl库-Windows平台

5.输入命令:

nmake /f Makefile.vc mode=static ENABLE_IDN=no WITH_SSL=static VC=15 MACHINE=x64 DEBUG=no

nmake /f Makefile.vc mode=static ENABLE_IDN=no WITH_SSL=static VC=15 MACHINE=x64 RTLIBCFG=static DEBUG=no

参数分析:

mode=static 表示生成静态链接库.lib文件,如果要生成动态链接库用 mode=dll

ENABLE_IDN=no 这个是必须加的,表示不使用Windows IDN APIs,默认是 yes,这样会导致使用时出现连接错误。

WITH_SSL=static 表示用Openssl的静态连接库(.lib)文件参与编译,如果用Openssl的动态链接库就写WITH_SSL=dll。

VC=15 表示用VS2017进行编译,也可以指定其他版本的VS。

MACHINE=x64 表示编译出的是64位版本程序,如果想编译出32位的用 MACHINE=x86

RTLIBCFG=static 表示静态编译CRT运行时库(/MT),否则默认是(/MD)动态链接运行时库。

DEBUG=no 表示编译release版本,如果想编译Debug版本用 DEBUG=yes。

更具体编译选项请阅读 curl\winbuild\BUILD.WINDOWS.txt 文档。

 

6. 输入上面命令之后,回车,等待编译完成,

   打开curl源码文件夹中的“builds”文件夹,里面保存所有编译结果,编译完成。

编译Libcurl库-Windows平台

7. 项目测试

    此种编译方式已经通过https双向认证的测试。

    可以用 http://blog.****.net/sunflover454/article/details/49030803 测试。