编译 libcurl

本教程主要完成两个目标:

  1. 如何编译 curl / libcurl
  2. 如何在 visual studio中使用 自己编译的libc特别是自定义扩展模块的版本

准备环境

  1. 下载源码
  2. 打开curl文件夹,运行buildconf.bat
  3. 管理员权限打开 vs命令行将目录定位到 curl文件夹/winbuild

    1. 注意这里的 vs命令行 有很多版本
    2. 选择哪个版本就只能编译那个版本 的 libcurl

编译

  1. 进入 curl文件夹/winbuild 开始编译
  2. 编译得结果在curl文件夹/builds文件夹下
  3. 这里列举常用的4种编译方式

    nmake /f Makefile.vc mode=static VC=14 MACHINE=x86 DEBUG=no
    nmake /f Makefile.vc mode=static VC=14 MACHINE=x64 DEBUG=no
    nmake /f Makefile.vc mode=dll VC=14 MACHINE=x86 DEBUG=no
    nmake /f Makefile.vc mode=dll VC=14 MACHINE=x64 DEBUG=no

高级编译

导入 第三方库文件

  1. 在文件curl文件夹/winbuild/BUILD.WINDOWS.txt中 有具体的编译配置选项
  2. 使用扩展功能 需要添加第三方lib 可以用php的源
  3. 导入第三方类库需要指定 第三方库文件的位置,库文件是 dll模式还是静态模式
  4. 如果第三方库 是 DLL模式那么编译完成后需要自己复制 DLL文件到运行目录
nmake /f Makefile.vc mode=static VC=14 MACHINE=x64 DEBUG=no 
WITH_SSL=dll SSL_PATH="lib64\openssl-1.0.2p-vc14-x64" 
WITH_SSH2=dll SSH2_PATH="lib64\libssh2-1.8.0-vc14-x64" 
WITH_ZLIB=static ZLIB_PATH="lib64\zlib-1.2.8-vc14-x64" 
WITH_NGHTTP2=dll NGHTTP2_PATH="lib64\nghttp2-1.29.0-vc14-x64"

关于证书

  1. 官方说明
  2. 如果使用 openssl 编译那么默认是不信任任何证书的
  3. 下载firefox 信任根证书,重命名为 curl-ca-bundle.crt放在 推荐目录(详见官方文档)即可

libc导入visual studio

  1. 根据编译的不同情况 要包含的lib也是不一样的
  2. 一般是已下几个
/*
使用默认配置 静态 编译
没有使用第三方 模块
nmake /f Makefile.vc mode=static VC=14 MACHINE=x64 DEBUG=no
导入语法
*/
#define CURL_STATICLIB
#pragma comment ( lib, "ws2_32.lib" )
#pragma comment ( lib, "wldap32.lib" )
#pragma comment ( lib, "Normaliz.lib" )
//加密模块
#pragma comment( lib, "libcurl_a.lib")
#pragma comment ( lib, "Crypt32.lib" )



/*
如果使用了第三方模块
那么需要手动导入那些模块
*/
//底层模块
#define CURL_STATICLIB
#pragma comment ( lib, "ws2_32.lib" )
#pragma comment ( lib, "wldap32.lib" )
#pragma comment ( lib, "Normaliz.lib" )
//#pragma comment ( lib, "Crypt32.lib" ) 我们使用第三方 模块openssl,不需要这个模块了
//第三方模块
#pragma comment( lib, "libcurl_a.lib")
#pragma comment( lib, "libeay32.lib")
#pragma comment( lib, "libssh2.lib")
#pragma comment( lib, "libssh2_a.lib")
#pragma comment( lib, "nghttp2.lib")
#pragma comment( lib, "ssleay32.lib")//openssl 
#pragma comment( lib, "ssleay32.lib")//openssl
#pragma comment( lib, "zlib_a.lib")
Last modification:November 19, 2020
如果觉得我的文章对你有用,请随意赞赏