WINDOWS平台上使用CURL库发送网络消息,必须支持https,那么CURL库也就必须带OPENSSL,我电脑是WIN7系统32位,故以下的各种编译均是在该环境下实测通过
如果需要支持汇编,还需要提前安装nasm,下载地址为:http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D
开始编之前,需要准备几个工具,打开vs的命令提示行,分别cl回车,输入nmake -v 回车,如果有任意一个说不是内部或外部命令之类的,就需要配一些环境否则可跳过这部分
1.添加环境变量:
1.1在环境变量的系统变量中添加INCLUDE项,值是
D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft SDKs\Windows\v7.1\Include
1.2添加LIB项,值是
D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft SDKs\Windows\v7.1\Lib
1.3在path项中添加
D:\Program Files\Microsoft Visual Studio 8\Common7\Tools;D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;D:\Program Files\Microsoft Visual Studio 8\VC\bin;
2.到D:\Program Files\Microsoft Visual Studio 8\Common7\Tools执行一下vsvars32.bat
3.再次尝试cl回车和nmake -v回车,如果还不行,就注销一下系统,然后就可以了
上面的环境正常以后就可以开始了
第一步:下载安装配置ActivePerl
下载地址:http://www.activestate.com/activeperl/downloads
在cmd中输入perl -v可以查看perl的版本号,如果出现perl不是内部命令错误,这将perl的路径d:\perl\bin添加到环境变量中的系统变量中的path中,在试一下perl -v命令,如果还是不行,计算机重启一下就可以了
第二步:下载安装Zlib,我下载的版本为zlib 1.2.11
下载地址:http://zlib.net/
网站上既有源码也有已经编译好的lib,我这里自己重新编译一遍,有两种编译方式:
编译方式一:用makefile(zlib1211\win32)编译,makefile需要启动VS2008命令提示来进行编译
第一步:启动VS2008命令提示
第二步:分别输入以下两个指令
cd /d F:\curlpack\zlib-1.2.11
nmake -f win32/Makefile.msc
编译完成后,我们在zlib文件下查看,会看到以下两个编译完成的文件
编译方式二:用VS编译,我用VS2008
第一步:cmd 命令进入 zlib-1.2.11\contrib\masmx86
如果是64位机器,则进入 zlib-1.2.11\contrib\masmx64
第二步:运行 bld_ml32.bat,会生成inffas32.asm,match686.asm这两个文件,这两个文件在后面的VS编译中需要用到
当然,在这步之后,在VS2008命令提示中进入zlib的文件夹然后输入下面的命令也是可以编译成功的
nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj"
第三步:打开VS2008,打开zlib-1.2.11\contrib\vstudio\vc9\zlibvc.sln ,选择WIN32平台,编译整个解决方案或者zlibvc这个项目即可得到
第三步:下载编译OPENSSL,我下载的版本为 openssl-1.0.2k.tar.gz
下载地址:http://www.openssl.org/source/
http://slproweb.com/products/Win32OpenSSL.html 这里可以直接下载OPENSSL的安装包,不需要我们自己去编译,方便好用
OPENSSL是需要自己编译的,有两种编译方式,分别是makefike和VS编译
编译方式一:命令行方式,打开VS2008命令提示
第一步:解压压缩包后,请打开openssl-1.0.2k文件夹下的 INSTALL.W32 ,这里有详细的编译说明,对应的平台打开对应的INSTALL文件即可
新建一个存放OPENSSL编译结果的文件夹,我的是:F:\curlpack\openssl
第二步:VS2008命令行中进入解压后的文件夹中
cd F:\curlpack\openssl-1.0.2k
第三步:继续输入命令
perl Configure VC-WIN32 no-asm --prefix=F:\curlpack\openssl
ms\do_ms
nmake -f ms\ntdll.mak
第四步:编译完成之后,用这个命令测试编译是否成功
nmake -f ms\ntdll.mak test
第五步:安装
nmake -f ms\ntdll.mak install
第四步:下载libssh2,我下载的版本是libssh2-1.7.0.tar.gz
下载地址:https://www.libssh2.org/download/
因为我选择的curl是带SSL 和 SSH的,所以有了这一步,如果只选择该版本SSL的,那这一步就要替换成ngttp2 的下载了
网上提供了源码和目标DLL安装包,一般直接下载DLL安装比较快捷,我选择的是自己编译
第一步:打开libssh2-1.7.0\win32 文件夹下的config.mk 修改里面的OPENSSL和ZLIB的路径为上面编译好的路径,这里也可以把zlib相关选项关闭掉
第二步:也是有两种编译方式,makefile和VS编译
编译方式一:用makefike编译,打开VS2008命令提示工具,进入根目录
cd F:\curlpack\libssh2-1.7.0
nmake /f NMakefile
编译方式二:
用VS2008打开 F:\curlpack\libssh2-1.7.0\win32\libssh2.dsw 工程,提示转换,选择全部转换
如果直接编译libssh2工程,会报错:fatal error C1083: 无法打开包括文件:“openssl/opensslconf.h”: No such file or directory
因为我编译好的openssl并不在libssh2的文件夹下,所以需要添加路径
libssh2依赖openssl 和 zlib ,现在把需要包含的文件路径添加进项目: 工具--》选项--》项目和解决方案--》VC++目录
当然这个路径的添加也可以在 项目属性页中添加
添加包含文件路径
添加库文件路径
我看网上还有大神在这里有一步:项目属性页--》C++--》代码生成--》运行库--》多线程(/MT)
我没有这步也是可以编译成功的,也就是用的默认的,不知道这一步有什么作用,有待查证,所以这里记一笔
然后再编译libssh2工程即可成功!
第五步:下载curl,我下载的版本是 curl-7.53.1_SSL_SSH.zip
下载地址:https://curl.haxx.se/download.html
可以看到有很多版本可以选择
我选择curl-7.53.1_SSL_SSH.zip 只是因为第一个只带SSL的需要ngttp2,而这个库我是怎么都下载不下来,所以放弃了,如下所示
好了,下载完成之后,解压F:\curlpack\curl-7.53.1
同样,也有两种编译方式,一种makefile,一种是VS编译
编译方式一:makefile编译,需要使用VS2008的命令提示
第一步:打开VS2008命令提示,进入解压后的根目录
cd F:\curlpack\curl-7.53.1\winbuild
第二步:编译命令可参考该目录下的 BUILD.WINDOWS.txt
编译方式二:用VS2008打开工程编译
第一步:用VS打开工程F:\curlpack\curl-7.53.1\projects\Windows\VC9\curl-all.sln
第二步:对libcurl项目,增加包含文件和库文件路径
编译libcurl项目,这时我出现链接错误:fatal error LNK1181: 无法打开输入文件“libssh2d.lib”
一看,原来是文件名的问题,将项目属性--》链接器--》输入--》附加依赖项 里面的libssh2d.lib 修改为 libssh2.lib即可编译成功
第三步:同样增加curl项目的包含文件和包含库的项目,编译curl,即可成功。