zoukankan      html  css  js  c++  java
  • libcurl库的编译

    终于弄懂了libcurl库的编译,记下来免得忘记。

    下载地址:

     
     
        注:这个在安装后,在安装目录下就有对应的  dll、include文件 和 lib 文件
        添加openssl库是为了添加 libcurl库 对 https 协议的支持
     
     
    编译过程:
    1、选择编译版本
        编译不同版本的libcurl需要添加不同的库支持。
        
        解压libcurl的压缩包后,进入  projectsWindowsVC10lib 目录。打开 libcurl.sln      //你的vc版本号
        
     
     
        添加openssl支持,选择 "DLL Debug - DLL OpenSSL" 版本
     
    2、添加openssl目录
        下载安装openssl目录
        2.1、创建libcurl库依赖的openssl目录,并拷贝头文件
     
        查看项目的属性
     
        注意到:
     
     
    也就是说,我们需要把openssl目录下的Include/openssl文件夹 整个复制到 curl压缩包的解压目录的同级目录中。
     
     
     
    至于为什么要整个openssl文件夹拷贝过去,而不是把里面的文件拷贝过去,你可以先编译一次,注意一下提示的文件结构。
     
        2.2、在openssl/lib 中 找到 libeay32.lib 和 ssleay32.lib文件 ,拷贝到 projectsWindowsVC10lib 目录下
     
        至于为什么需要这两个文件,查看 属性/链接器/输入/附件依赖项/ ,前面两个系统自带的,后面的是我们要添加的。
     
     3、编译并使用。
        3.1、直接编译就可以得到我们需要的 libcurld.lib 和 libcurld.dll
                在 uildWin32VC10 路径下可以找到对应版本编译出来的库。
        3.2、使用 libcurl库 
            3.2.1、给工程添加依赖的库:项目->属性->链接器->输入->附加依赖项,把libcurl.lib ws2_32.lib winmm.lib wldap32.lib添加进去
    注意,debug配置用libcurld.lib
            3.2.2、加入预编译选项:项目->属性->c/c++ ->预处理器->预处理器,把  ;BUILDING_LIBCURL;HTTP_ONLY复制进去(注意不要丢了";")
            3.2.3、libeay32.lib 和 ssleay32.lib 、libcurld.lib 拷贝到 工程.sln 所在目录
            3.2.4、libeay32.dll 和 ssleay32.dll 、libcurld.dll 拷贝到运行目录
     
        
     测试代码:
    #include<iostream>
    #include<string>
    #include"curl/curl.h"
    using namespace std;
    
    class CurlAutoRelease
    {
    public:
        CurlAutoRelease(){    p = curl_easy_init();}
        ~CurlAutoRelease(){    curl_easy_cleanup(p);}
        CURL *GetPtr(){    return p;}
    protected:
        CURL* p;
    };
    
    UINT CurlWriteBuffer(char *buffer,UINT size,UINT nmemb,std::string* stream)
    {
        UINT sizes = size*nmemb;
        if(stream == NULL) return 0;
        stream->append(buffer,sizes);
        return sizes;
    }
    
    int main()
    {
        curl_global_init(CURL_GLOBAL_DEFAULT); 
        
        std::string szUrl("www.baidu.com");
        std::string szContent("");
    
        try
        {
            CurlAutoRelease curlAutoRelease;
            CURL* curl = curlAutoRelease.GetPtr();
            CURLcode res;
    
            std::string strResult;
            {
                curl_easy_setopt(curl,CURLOPT_URL,szUrl.c_str());
                curl_easy_setopt(curl,CURLOPT_VERBOSE,1);                                //打开调试
                curl_easy_setopt(curl,CURLOPT_POSTFIELDS,szContent.c_str());            //post请求    
                curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,szContent.length());
                curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,CurlWriteBuffer);            //写回调
                curl_easy_setopt(curl,CURLOPT_WRITEDATA,&strResult);                    //写存储
                curl_easy_setopt(curl,CURLOPT_TIMEOUT,10);                                //最长执行时间
    
                res = curl_easy_perform(curl);
            }
    
            if(res != CURLE_OK)
            {
                //投递Http requeset 失败
                std::cout<<"投递Http请求失败!"<<std::endl;
                return -1;
            }
            else
            {
                std::cout<<strResult<<std::endl;
            }
        }
        catch (...)
        {
            //出Exception
            std::cout<<"HttpRqWorker::HandleTask出现了Exception!!"<<std::endl;
        }
    
    
        curl_global_cleanup();
        return 0;
    }
        
     
     
     
     
  • 相关阅读:
    C#|.NET从控制反转(依赖注入)想到事件注入 (非AOP)
    libevent 2.1.3 for VS2008 source code
    如何进行object以及Array(数组)的深复制
    Flash ProgressEvent.bytesTotal为0的原因和解决
    Flash字体嵌入方法总结—(4)进阶篇
    mysql分组取每组前几条记录(排名) 附group by与order by的研究
    Flash游戏优化技巧
    教程:深入理解Flash的沙箱 – Application Domains
    Flash Player 11异步解码Bitmap
    常用公式
  • 原文地址:https://www.cnblogs.com/sixbeauty/p/4428932.html
Copyright © 2011-2022 走看看