vs2017编译和使用libcurl库

MrLee1月前 210

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动态链接库

        如果想使用动态编译,将“mode=static”改为“mode=dll”。 
        如果使用其他版本Visual Studio,“VC=”后面的数字应该改为该Visual Studio版本。 
        如果使用x86,将“MACHINE=x64”改为“MACHINE=x86”。 

        如果需要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编译即可。

本文链接:https://www.it72.com/12670.htm

推荐阅读
最新回复 (0)
    返回