VS2017编译libcurl

来源:互联网 发布:东方财富choice mac 编辑:程序博客网 时间:2024/05/22 16:45
在集成百度API的时候,用到了libcurl,网上下载的没有支持https,所以自己下载了源码,进行了编译。
源码下载地址:https://curl.haxx.se/download.html
版本:curl 7.55.1
编译环境:Win10,VS2017

1、下载或者编译openssl
可以在http://windows.php.net/downloads/php-sdk/deps/vc15/下载编译好的包。
源码可以去官网下载https://www.openssl.org/source/ , 我下载的版本是1.1.0f ,网上的编译教程一般都是针对1.0.2的,两者之间的编译过程有些不同,需要注意一下。
编译前仔细阅读以下INSTALLNOTES.WIN 这两个文件,版本1.0.2对应的文件叫 INSTALL.W32和INSTALL.W64,也不一样,编译过程基本上都在这两个文件里面。
1)安装perl和汇编工具,按照NOTES.WIN里面推荐的去安装 ActivePerl和nasm, 尤其是注意ActivePerl要安装最新版,我原来机器上有一个5.12版本的,结果导致最后 nmake install的时候发生错误,尝试了好多方法都没有解决,最后把ActivePerl升级到了最新版,问题才得以解决。(如果官网下载ActivePerl太慢,可以从360的软件管家里面搜索安装
NASM我安装的稳定版(当前是2.13.01
2)打开VS2017的命令行程序,如果编译x64版本的,就打开 “x64 Native Tools Command Prompt for VS 2017”, 如果编译32位,就打开 “x86 Native Tools Command Prompt for VS 2017”,如果你是直接打开的windows自带的 “命令提示符” 程序,你还需要运行vcvars64.bat 或者vcvars32.bat ,这两个批处理文件在 VS2017的安装目录下,搜索一下就可以找到,我的是在E:\Softwares\VS2017\Community\VC\Auxiliary\Build 下面。
3)把下载的源文件解压,我的是在F:\Workspace\openssl-1.1.0f 下,命令行程序定位到该目录 (cdF:\Workspace\openssl-1.1.0f
4)输入 perl Configure VC-WIN64A --perfix=E:\Softwares\OpenSSL (将其安装到E:\Softwares\OpenSSL)
如果想编译32位版本的,就输入 perl Configure VC-WIN32 --perfix=E:\Softwares\OpenSSL
5)按照 INSTALL 所述,依次输入:
nmake
nmake test
nmake install
后面所需要的就是等待结果了,网上很多编译教程都是针对1.0.2版本,不要被误导了。
另外,如果机器上有在运行360安全卫士,也要关闭一下,不然有可能nmake test失败。

2、下载或编译zlib
如果要下载编译好的包,还是去上面的网站http://windows.php.net/downloads/php-sdk/deps/vc15/
下载源码请移步http://zlib.net/, 我下载的zlib 1.2.11,解压缩,我的放在 F:\Workspace\zlib-1.2.11
同样的,我们需要打开VS2017的命令行程序,注意要打开x64版本的,
1)切换到zlib源目录(cd F:\Workspace\zlib-1.2.11)
2)如文件win32/Makefile.msc中所述,输入下述指令
nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
3)另外,win32/VisualC.txt提到,我们也可以直接代开F:\Workspace\zlib-1.2.11\contrib\vstudio\VC14\zlibvc.sln,用IDE直接编译。
编译Debug版本的时候,需要把“生成前事件”里面的命令行改成下面这样,Release版本不用改
cd ..\..\..\contrib\masmx64
bld_ml64.bat
如果是编译x86的Debug版本,会遇到以下问题:
”模块对于SAFESEF映像是不安全的“
这个在链接器的“高级“里面,把”映像具有安全异常处理程序“改成否即可

3、下载或编译libssh2
同样的,如果要下载编译好的包,还是去上面的网站http://windows.php.net/downloads/php-sdk/deps/vc15/
下载源码可以去官网https://www.libssh2.org/,我下载的是版本是libssh2-1.8.0,解压缩,我的源目录为F:\Workspace\libssh2-1.8.0
1)编辑文件F:\Workspace\libssh2-1.8.0\win32\config.mk,指定openssl以及zlib的相关信息,我修改了一下内容:
OPENSSLINC=..\openssl-1.1.0f\include
OPENSSLLIB=..\openssl-1.1.0f
ZLIBINC=..\zlib-1.2.11
ZLIBLIB=..\zlib-1.2.11
LIBS=$(LIBS) $(OPENSSLLIB)\libcrypto.lib $(OPENSSLLIB)\libssl.lib
2)打开x64版本的VS2017的命令行程序,切换到libssh2根目录(cdF:\Workspace\libssh2-1.8.0),执行下面的命令:
nmake -f NMakefile WITH_ZLIB=1
3)执行成功后在libssh2根目录下生成libssh2.liblibssh2.dll,同样的将其拷贝到所需目录下;
4)另外一种办法是采用VS2017 IDE打开F:\Workspace\libssh2-1.8.0\win32\libssh2.dsw,转换成VS2017工程后把openssl和zlib路径设置好后,直接进行编译
4)还有一种办法是安装CMake,后面的步骤可以参见F:\Workspace\libssh2-1.8.0\docs\INSTALL_CMAKE

4、编译curl
源码下载解压,我放在了F:\Workspace\curl\curl-7.55.1,注意要比openssl和zlib深一个目录。
这里也可以采用两种编译方法:

第一种方法:采用命令行方式编译
主要的编译步骤都在文件 curl\curl-7.55.1\winbuild\BUILD.WINDOWS.txt 里面,需要仔细阅读。根据BUILD.WINDOWS.txt 所述,我们按照以下步骤进行编译:
1)创建目录 deps,放在 curl\ 下面,月 curl\curl-7.55.1同级,在 deps下创建 lib、include、bin三个字目录,目录结构如下:
F:\Workspace\curl\
|_curl-7.55.1
| |_winbuild
|
|_deps
|_ lib
|_ include
|_ bin
2)把 F:\Workspace\zlib-1.2.11下面的zlib.lib复制到 deps\lib 下面,
把F:\Workspace\zlib-1.2.11下面的zlib.h、zutil.h、zconf.h三个文件复制到 deps\include下面,
把 F:\Workspace\openssl-1.1.0f下面的libssl.lib、libcrypto.lib复制到 deps\lib 下面,
把F:\Workspace\openssl-1.1.0f\include下面的openssl整个目录复制到 deps\include下面,
把F:\Workspace\libssh2-1.8.0下面的libssh2.lib复制到 deps\lib 下面,
把F:\Workspace\libssh2-1.8.0下面的libssh2.h、libssh2_publickey.h、libssh2_sftp.h三个文件复制到 deps\include下面
3)在VS2017的x64命令行程序里,切换到winbuild目录 (cd F:\Workspace\curl\curl-7.55.1\winbuild
4)输入下面的命令:
nmake -f Makefile.vc mode=dll WITH_SSL=dll WITH_ZLIB=dll WITH_SSH2=dll ENABLE_IPV6=no MACHINE=x64
5)等待编译好之后,会生成目录 F:\Workspace\curl\curl-7.55.1\builds\libcurl-vc-x64-release-dll-ssl-dll-zlib-dll-sspi,下面有bin、include、lib三个目录,把F:\Workspace\openssl-1.1.0f下面的libcrypto-1_1-x64.dll、libssl-1_1-x64.dll复制到 bin目录下就可以了。
如果要在其他项目中调用libcurl,只要把整个目录 libcurl-vc-x64-release-dll-ssl-dll-zlib-dll-sspi 复制到相应的工程里就可以了。

第二种方法:直接用VS2017 IDE编译
打开 curl\curl-7.55.1\projects\Windows\VC14\curl-all.sln , VC14对应VS2015,我们用的VS2017,所有会有一个升级的过程 ,等待升级结束了,把openssl、zlib、libssh2的include和lib路径配置好,需要注意的是要把输入库libeay32.lib、ssleay32修改成liblibcrypto.lib、libssl.lib,之后直接编译就好了。