libcurl发送https请求,依赖于openssl和zlib
1 编译openssl
1) openssl的编译,依赖于ActivePerl,所以我们需要安装这个工具
这里使用ActivePerl_5.16.2.3010812913.msi,他默认会把自己注册到环境变量中,所以不需要
添加环境变量,也不需要重启机器了。比较人性化了
2) Openssl版本的选择
高版本的openssl用vs2015编译的时候缺少东西,用了一个低版本的openssl-1.0.1t.tar.gz,
不知道这个版本心脏滴血的漏洞补上了没有,不过可以用。
3) 编译的配置文件
源码目录的ms目录中有
nt.mak 编译为静态库的配置,我们用这个
ntdll.mak 编译为动态库的配置
过程如下
开始菜单栏找到vs2015,然后选择Developer Command Prompt for VS2015,运行后再运行下面的命令
perl Configure VC-WIN32 no-asm --prefix=G:\work\src\libcurl\openssl-1.0.1t
ms\do_ms.bat //会重新生成默认的配置nt.mak ntdll.mak ,会在文件中修正本源码的路径,所以在生成的文件后,再去修改
nt.msk ,其中CFLAG= /MT 这个地方要改为/MT,因为我们用release版本。
nmake -f ms\nt.mak //编译
nmake -f ms\nt.mak test // 可以测试有没有编译成功
nmake -f ms\nt.mak clean //可以清理,暂时用不到
nmake -f ms\nt.mak install //保存结果到指定的目录G:\work\src\libcurl\openssl-1.0.1t
2. 编译zlib
这里用的是zlib-1.2.11
1)开始菜单栏找到vs2015,然后选择Developer Command Prompt for VS2015,运行后再运行下面的命令
2) 编译脚本在win32的Makefile.msc文件,我们修改CFLAGS = -nologo -MT 改为MT MT MT 不是MD MD MD
3)nmake -f win32/Makefile.msc
3. 编译libcurl
1) 在源代码同级的目录下建立deps文件夹
此时的目录结构如下图
D:\dev\vs\http\
|__curl-src
| |_winbuild
|
|__deps
|_ lib
|_ include
|_ bin
将D:\dev\vs\http\ssllib\include下的openssl夹拷贝到D:\dev\vs\http\deps\include\目录下;
将zlib源码根目录下的zconf.h、zlib.h和zutil.h拷贝到D:\dev\vs\http\deps\include目录下。
将D:\dev\vs\http\ssllib\lib目录下的libeay32.lib和ssleay.lib拷贝到D:\dev\vs\http\deps\lib目录下;
将zlib源码根目录下的zlib.lib拷贝到D:\dev\vs\http\deps\lib目录下。
2) 解压libcurl
1)开始菜单栏找到vs2015,然后选择Developer Command Prompt for VS2015,运行后再运行下面的命令
2) 编译脚本在curl-7.55.1\winbuild下的MakefileBuild.vc,暂时不用修改,因为要编译为DLL还是静态库,是由命令决定的
3) 写一个bat脚本
@REM @echo off
@nmake /f Makefile.vc WITH_DEVEL=../../deps mode=static VC=14 WITH_SSL=dll WITH_ZLIB=dll ENABLE_IDN=yes RTLIBCFG=static DEBUG=no MACHINE=x86
@REM @echo on
WITH_DEVEL=../../deps //这个是我们要编译进来的库,openssl zlib
RTLIBCFG=static 和 mode=static //编译为静态库
WITH_SSL=dll WITH_ZLIB=dll//不是很明白,但是要这样写,要链接进来
具体帮助可以查看 BUILD.WINDOWS.txt文件
4) cd 到winbuild 然后 运行脚本build_with_ssl_zlib.bat
5) 最后编译lib成功了,已经不影响我们使用了 。但是链接curl.exe没有成功,
错误入下:libcurl_a.lib(rand_win.obj) : error LNK2019: unresolved external symbol __imp__BitBlt@36 referenced in func
……………………………………
最后我们在 MakefileBuild.vc中间中 WIN_LIBS = ws2_32.lib wldap32.lib advapi32.lib 的后面添加 User32.lib Gdi32.lib
6)
生成文件在D:\dev\vs\http\curl-7.46.0\builds\下如libcurl-vc-x86-debug-static-ssl-dll-zlib-dll-ipv6-sspi
4 使用
创建一个release工程,修改库的使用方式是mt,
工程中加入如下
预处理定义里面加入
CURL_STATICLIB;
头文件
#include "curl.h"
#include "easy.h"
源文件
#pragma comment(lib,"libcurl_a.lib")
//不加入下面三个库,会链接报错
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"wldap32.lib")
5 测试curl.exe
curl -F "file_data=@E:\AAB.bin" -F "file_path=E:\AAB.bin" -F "file_data=@E:\AAA.bin" -F "file_path=E:\AAA.bin" -F "api_key=ee0283c1-585e-4ba8-b85f-d395ea968dec" -F "submit_token=c9cb3f55670de94ec02f33f3a031588750300a19-ac96e834-38cc-42c3-ac14-5c57291758f3" http://172.0.2.27/http_server/
测试服务器用172.0.2.27 的hfs服务器
参考:
环境win10+2015
编译zlib和openssl的时候注意选择MT--静态库 /MD --动态库
编译openssl and zlib ,openssl 用openssl-1.0.1t.tar.gz ,别的版本编译有问题。
http://www.cnblogs.com/zzugyl/p/5037152.html
openssl 动态和静态库的选择
http://blog.163.com/weiming886521365@126/blog/static/331150742013101233712842/
Win10+VS2015编译libcurl
http://blog.youkuaiyun.com/alger_magic/article/details/52584579
//官方文档
1 编译openssl
1) openssl的编译,依赖于ActivePerl,所以我们需要安装这个工具
这里使用ActivePerl_5.16.2.3010812913.msi,他默认会把自己注册到环境变量中,所以不需要
添加环境变量,也不需要重启机器了。比较人性化了
2) Openssl版本的选择
高版本的openssl用vs2015编译的时候缺少东西,用了一个低版本的openssl-1.0.1t.tar.gz,
不知道这个版本心脏滴血的漏洞补上了没有,不过可以用。
3) 编译的配置文件
源码目录的ms目录中有
nt.mak 编译为静态库的配置,我们用这个
ntdll.mak 编译为动态库的配置
过程如下
开始菜单栏找到vs2015,然后选择Developer Command Prompt for VS2015,运行后再运行下面的命令
perl Configure VC-WIN32 no-asm --prefix=G:\work\src\libcurl\openssl-1.0.1t
ms\do_ms.bat //会重新生成默认的配置nt.mak ntdll.mak ,会在文件中修正本源码的路径,所以在生成的文件后,再去修改
nt.msk ,其中CFLAG= /MT 这个地方要改为/MT,因为我们用release版本。
nmake -f ms\nt.mak //编译
nmake -f ms\nt.mak test // 可以测试有没有编译成功
nmake -f ms\nt.mak clean //可以清理,暂时用不到
nmake -f ms\nt.mak install //保存结果到指定的目录G:\work\src\libcurl\openssl-1.0.1t
2. 编译zlib
这里用的是zlib-1.2.11
1)开始菜单栏找到vs2015,然后选择Developer Command Prompt for VS2015,运行后再运行下面的命令
2) 编译脚本在win32的Makefile.msc文件,我们修改CFLAGS = -nologo -MT 改为MT MT MT 不是MD MD MD
3)nmake -f win32/Makefile.msc
3. 编译libcurl
1) 在源代码同级的目录下建立deps文件夹
此时的目录结构如下图
D:\dev\vs\http\
|__curl-src
| |_winbuild
|
|__deps
|_ lib
|_ include
|_ bin
将D:\dev\vs\http\ssllib\include下的openssl夹拷贝到D:\dev\vs\http\deps\include\目录下;
将zlib源码根目录下的zconf.h、zlib.h和zutil.h拷贝到D:\dev\vs\http\deps\include目录下。
将D:\dev\vs\http\ssllib\lib目录下的libeay32.lib和ssleay.lib拷贝到D:\dev\vs\http\deps\lib目录下;
将zlib源码根目录下的zlib.lib拷贝到D:\dev\vs\http\deps\lib目录下。
2) 解压libcurl
1)开始菜单栏找到vs2015,然后选择Developer Command Prompt for VS2015,运行后再运行下面的命令
2) 编译脚本在curl-7.55.1\winbuild下的MakefileBuild.vc,暂时不用修改,因为要编译为DLL还是静态库,是由命令决定的
3) 写一个bat脚本
@REM @echo off
@nmake /f Makefile.vc WITH_DEVEL=../../deps mode=static VC=14 WITH_SSL=dll WITH_ZLIB=dll ENABLE_IDN=yes RTLIBCFG=static DEBUG=no MACHINE=x86
@REM @echo on
WITH_DEVEL=../../deps //这个是我们要编译进来的库,openssl zlib
RTLIBCFG=static 和 mode=static //编译为静态库
WITH_SSL=dll WITH_ZLIB=dll//不是很明白,但是要这样写,要链接进来
具体帮助可以查看 BUILD.WINDOWS.txt文件
4) cd 到winbuild 然后 运行脚本build_with_ssl_zlib.bat
5) 最后编译lib成功了,已经不影响我们使用了 。但是链接curl.exe没有成功,
错误入下:libcurl_a.lib(rand_win.obj) : error LNK2019: unresolved external symbol __imp__BitBlt@36 referenced in func
……………………………………
最后我们在 MakefileBuild.vc中间中 WIN_LIBS = ws2_32.lib wldap32.lib advapi32.lib 的后面添加 User32.lib Gdi32.lib
6)
生成文件在D:\dev\vs\http\curl-7.46.0\builds\下如libcurl-vc-x86-debug-static-ssl-dll-zlib-dll-ipv6-sspi
4 使用
创建一个release工程,修改库的使用方式是mt,
工程中加入如下
预处理定义里面加入
CURL_STATICLIB;
头文件
#include "curl.h"
#include "easy.h"
源文件
#pragma comment(lib,"libcurl_a.lib")
//不加入下面三个库,会链接报错
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"wldap32.lib")
5 测试curl.exe
curl -F "file_data=@E:\AAB.bin" -F "file_path=E:\AAB.bin" -F "file_data=@E:\AAA.bin" -F "file_path=E:\AAA.bin" -F "api_key=ee0283c1-585e-4ba8-b85f-d395ea968dec" -F "submit_token=c9cb3f55670de94ec02f33f3a031588750300a19-ac96e834-38cc-42c3-ac14-5c57291758f3" http://172.0.2.27/http_server/
测试服务器用172.0.2.27 的hfs服务器
参考:
环境win10+2015
编译zlib和openssl的时候注意选择MT--静态库 /MD --动态库
编译openssl and zlib ,openssl 用openssl-1.0.1t.tar.gz ,别的版本编译有问题。
http://www.cnblogs.com/zzugyl/p/5037152.html
openssl 动态和静态库的选择
http://blog.163.com/weiming886521365@126/blog/static/331150742013101233712842/
Win10+VS2015编译libcurl
http://blog.youkuaiyun.com/alger_magic/article/details/52584579
//官方文档
https://curl.haxx.se/libcurl/c/
百度云关键字(SRC\windows)
libcurl.zip