使用 Visual Studio 2015编译的 curl
Windows 10 下使用 VS2015 编译的 curl
=========================
目的:编译的 curl
操作系统:Windows 10
编译工具:Visual Studio 2015
====================
准备工作:
1. 已经安装 Visual Studio 2015
开始
===
Step 1. 下载 curl 源代码
curl-7.64.0.tar.gz
网址: https://curl.haxx.se/download.html
解压缩至某个文件夹, 比如 D:\download\C++\curl\curl-7.64.0
Step 2.
其他的如 libssh2, nghttp2, openssl, zlib 从下面的网址下载
https://windows.php.net/downloads/php-sdk/deps/
这里分别下载
libssh2-1.8.0-vc14-x86.zip
nghttp2-1.32.0-vc14-x86.zip
openssl-1.0.2q-vc14-x86.zip
zlib-1.2.8-vc14-x86.zip
分别解压缩后,得到 bin\ include\ lib\ 三个文件夹,将它们拷贝到
D:\download\C++\curl\curl-7.64.0\deps\ 文件夹中
目录结构形如:
somedirectory\
|_curl-src
| |_winbuild
|
|_deps
|_ bin
|_ include
|_ lib
这里 somedirectory=D:\download\C++\curl\curl-7.64.0
curl-src=curl-7.64.0
Step 3. 切换至 winbuild 文件夹
cd D:\download\C++\curl\curl-7.64.0\curl-7.64.0\winbuild
Step 4. 详细阅读 BUILD.WINDOWS.txt
特别是下面这部分内容
Building with Visual C++
========================
Step 5. 编译
打开 VS 开发人员命令提示,执行下面的命令
nmake /f Makefile.vc mode=static VC=14 WITH_SSL=static WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=static
nmake /f Makefile.vc mode=dll VC=14 WITH_SSL=static WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=static
这里 VC=14 对应 VS2015,注意生成的是 x86 机器上的,即上面缺省 MACHINE=x86
然后在 builds 文件夹下有
libcurl-vc14-x86-release-static-ssl-static-zlib-static-ssh2-static-ipv6-sspi-nghttp2-dll
//---------------------------------
如果要加上 CARES,则首先下载c-ares-1.15.0.tar (https://c-ares.haxx.se/)
* 解压缩
* 阅读 INSTALL.md, P327, ### MSVC from command line
* 参见 [README.msvc]
* 编译步骤很简单
* 首先打开 VS 开发人员命令提示,然后输入下面的命令
* nmake -f Makefile.msvc
* 编译结束会生成 msvc 文件夹,其中有四个子文件夹
* msvc
* |_ acountry
* |_ adig
* |_ ahost
* |_ cares
* 其中 cares 文件夹包含了我们需要的文件(c-ares 库文件),而其余三个是例子程序,用到了这个库。
下面,为了编译 curl 和 libcurl, 在上面的 deps 文件夹下创建子文件夹 c-ares
将 cares 中的文件复制到
D:\download\C++\curl\curl-7.64.0\deps\c-ares
具体 c-ares 中的文件清单参见文末的附录
//---------------------------------
最后回到
D:\download\C++\curl\curl-7.64.0\curl-7.64.0\winbuild
在 VS 开发人员命令提示下键入如下命令
nmake /f Makefile.vc mode=static VC=14 WITH_SSL=static WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=static WITH_CARES=static CARES_PATH=../../deps/c-ares
nmake /f Makefile.vc mode=static VC=14 WITH_SSL=dll WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=static WITH_CARES=dll CARES_PATH=../../deps/c-ares
分别编译得到相应的 curl.exe 及其他文件.
========================================
See also
http://www.atzjg.net/admin/do/view_question.php?qid=2203
=========================
附录 A. c-ares 中的文件清单
=========================
其中 include 中的文件就是来自于 c-ares-1.15.0 中的 .c 和 .h 文件
D:\DOWNLOAD\C++\CURL\CURL-7.64.0\DEPS\C-ARES
+---bin
| cares.dll
| cares.exp
| caresd.dll
| caresd.exp
| caresd.pdb
|
+---include
| acountry.c
| adig.c
| ahost.c
| ares.h
| ares_android.c
| ares_android.h
| ares_build.h
| ares_cancel.c
| ares_create_query.c
| ares_data.c
| ares_data.h
| ares_destroy.c
| ares_dns.h
| ares_expand_name.c
| ares_expand_string.c
| ares_fds.c
| ares_free_hostent.c
| ares_free_string.c
| ares_getenv.c
| ares_getenv.h
| ares_gethostbyaddr.c
| ares_gethostbyname.c
| ares_getnameinfo.c
| ares_getopt.c
| ares_getopt.h
| ares_getsock.c
| ares_inet_net_pton.h
| ares_init.c
| ares_iphlpapi.h
| ares_ipv6.h
| ares_library_init.c
| ares_library_init.h
| ares_llist.c
| ares_llist.h
| ares_mkquery.c
| ares_nowarn.c
| ares_nowarn.h
| ares_options.c
| ares_parse_aaaa_reply.c
| ares_parse_a_reply.c
| ares_parse_mx_reply.c
| ares_parse_naptr_reply.c
| ares_parse_ns_reply.c
| ares_parse_ptr_reply.c
| ares_parse_soa_reply.c
| ares_parse_srv_reply.c
| ares_parse_txt_reply.c
| ares_platform.c
| ares_platform.h
| ares_private.h
| ares_process.c
| ares_query.c
| ares_rules.h
| ares_search.c
| ares_send.c
| ares_setup.h
| ares_strcasecmp.c
| ares_strcasecmp.h
| ares_strdup.c
| ares_strdup.h
| ares_strerror.c
| ares_strsplit.c
| ares_strsplit.h
| ares_timeout.c
| ares_version.c
| ares_version.h
| ares_writev.c
| ares_writev.h
| ares__close_sockets.c
| ares__get_hostent.c
| ares__read_line.c
| ares__timeval.c
| bitncmp.c
| bitncmp.h
| config-dos.h
| config-win32.h
| inet_net_pton.c
| inet_ntop.c
| nameser.h
| setup_once.h
| windows_port.c
|
\---lib
cares.lib
caresd.lib
libcares.lib
libcaresd.lib