编译 libcurl
本教程主要完成两个目标:
- 如何编译
curl
/libcurl
- 如何在
visual studio
中使用 自己编译的libc
特别是自定义扩展模块的版本
准备环境
- 下载源码
- 打开
curl文件夹
,运行buildconf.bat
管理员权限
打开vs命令行
将目录定位到curl文件夹/winbuild
- 注意这里的
vs命令行
有很多版本 - 选择哪个版本就只能编译那个版本 的
libcurl
- 注意这里的
编译
- 进入
curl文件夹/winbuild
开始编译 - 编译得结果在
curl文件夹/builds
文件夹下 这里列举常用的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
高级编译
导入 第三方库文件
- 在文件
curl文件夹/winbuild/BUILD.WINDOWS.txt
中 有具体的编译配置选项 - 使用扩展功能 需要添加第三方lib 可以用php的源
- 导入第三方类库需要指定
第三方库文件的位置
,库文件是 dll模式还是静态模式
- 如果第三方库 是
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"
关于证书
- 官方说明
- 如果使用 openssl 编译那么默认是不信任任何证书的
- 下载
firefox
信任根证书,重命名为curl-ca-bundle.crt
放在 推荐目录(详见官方文档)即可
libc导入visual studio
- 根据编译的不同情况 要包含的lib也是不一样的
- 一般是已下几个
/*
使用默认配置 静态 编译
没有使用第三方 模块
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")