libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。 libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传
平台环境:
win10, vs2017
1,从网站下载编译好的库文件:
如果不想自己手动编译,可以直接从这里下载对应的库文件:https://windows.php.net/downloads/php-sdk/deps/
目前提供的有vc11(vs2012), vc14(vs2015), vc15(vs2017),每个版本都有x64和x32版本。
2,libcurl手动编译源码:
(1)在这里https://github.com/curl/curl下载源码,注意选择分支,目前使用的分支为7.59.0
(2)进入到下载的源码文件夹中,双击buildconf.bat文件运行
(3)进入curl文件夹中的“winbuild”文件夹,并复制其文件夹路径,例如:E:\xxxxxxxxxx\curl_7.59.0\winbuild
(4)打开开始菜单,找到vs2017,编译64位,选择"适用于 VS 2017 的 x64 本机工具命令提示",编译32位,选择"适用于 VS 2017 的 x86 本机工具命令提示",这里使用64位为例, 右键以管理员身份运行,进入到命令行中,输入命令: cd /d E:\xxxxxxxxxx\curl_7.59.0\winbuild,进入到此目录,如果找不到x86,可以手动cmd执行
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat
(5)输入:
nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 DEBUG=no //x64 release nmake /f Makefile.vc mode=static VC=15 MACHINE=x86 DEBUG=yes //x86 debug nmake /f Makefile.vc mode=dll VC=15 MACHINE=x86 DEBUG=yes //x86 debug dll动态链接库 //vs2022编译64位静态库,不需要DLL文件 nmake /f Makefile.vc mode=static VC=17 RTLIBCFG=static ENABLE_IPV6=no MACHINE=x64 DEBUG=no
如果想使用动态编译,将“mode=static”改为“mode=dll”。
如果使用其他版本Visual Studio,“VC=”后面的数字应该改为该Visual Studio版本。
如果使用x86,将“MACHINE=x64”改为“MACHINE=x86”。
编译时如果加了RTLIBCFG=static这个选项,就相当于编译了/MT版本的libcurl,否则是/MD版本的
如果需要debug版,将“DEBUG=no”改为“DEBUG=yes”。
(6)输入上面命令之后,回车,等待编译完成,
打开curl源码文件夹中的“builds”文件夹,将名字最短的文件夹备份(如果x64和x86都编译了,则需要备份两个名字最短的文件夹),curl文件夹如果无其他需要则可全部删除。这个库文件就是我们最终要调用的文件。编译完成。
3,如何使用库文件
本文将编译生成的文件夹剪切至其他路径,以便长期使用。
新建一个项目。本文选择新建一个名为“Test”的空项目。
右击项目,选择“Properties”。
选择需要的配置。
将刚刚编译生成的文件夹中的“include”文件夹和“lib”文件夹添加至工程。(如果编译了debug版libcurl,则应将debug文件夹中的内容添加至debug配置工程)
将“libcurl_a.lib”添加至工程。
如果你使用了静态编译libcurl,则需将“CURL_STATICLIB”添加至工程。
如果没有编译debug版libcurl,则需要将“Runtime Library”改为Release版(即后面不带小写字母“d”)。同时官方并不建议使用“/MT”或“/MTd”。
测试代码
#include <curl/curl.h> int main(int argc, char* argv[]) { CURL *curl = nullptr; CURLcode res; curl = curl_easy_init(); if (curl != nullptr) { curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } /* always cleanup */ curl_easy_cleanup(curl); } return 0; }
如果想直接编译成动态链接库,直接进入curl-7.59.0\projects\Windows\VC15目录用VS2017编译即可。
- 文章2302
- 用户1336
- 访客10968998
清明节邀请我们以静思与敬意祭奠祖先。