• libCURL开源库在VS2010环境下编译安装,配置详解


    libCURL开源库在VS2010环境下编译安装,配置详解

    转自:http://my.oschina.net/u/1420791/blog/198247

        http://blog.csdn.net/sunnyleevip/article/details/41038559

    文章一:CURL开源库VS2010环境下编译安装,配置详解

    一 准备

    1.1 CURL官网下载地址:http://curl.haxx.se/download.html

    1.2 找到源码包,我这里下载的是7.32.0版:http://curl.haxx.se/download/curl-7.32.0.zip

    二 步骤

    2.1

    打开curl-7.32.0vsvc8libvc8libcurl.vcproj文件,VS会提示升级工程,下一步即可

    VC工程里有些设置问题导致不能直接编译,需要稍作修改

    2.2

    打开工程属性 > CC++ > 常规 > 附加包含目录。这里的包含目录是"..include",而这个目录根本就不存在,它应该指

    向"curl-7.32.0include"才对,所以把这里改成"......include"。(或者直接完整路径也可以)

     

    2.3打开工程属性 > CC++ > 预处理器 > 预处理器定义。这里有个默认宏"BUILDING_LIBCURL",把它改

    成"CURL_STATICLIB"。这样,那些接口函数就不会被声明为导出函数了。

     

    2.4打开工程属性 > CC++ > 库管理器 > 常规 > 附加依赖项。添加ws2_32.lib和wldap32.lib,这是CURL必须依赖的。


    2.5.把"libcurl.rc"从工程中移除,它只是版本信息,只会增大文件,去掉!(无所谓)


    2.6 可编译出如下版本,根据需要手动设置编译

    libcurld.lib //debug      Multi-threaded (/MT)
     
    libcurl.dll  //release    Multi-threaded Debug (/MTd)

    //以上为静态库版本,生成exe体积大,包含库。

    生成两种版本的均可。但是连接使用的时候注意对应版本。


    libcurld.lib //debug     Multi-threaded DLL Debug (/MDD)
     
    libcurl.dll //release    Multi-threaded DLL (MD)

    //以上为动态库版本,生成exe体积小,不包含库。

    2.7 然后将其分别放入自己创建一个debug和一个release文件夹内、

        例如debug/libcurl.lib release//libcurl.lib
            debug/libcurl.dll release//libcurl.dll
     注意将其放入C:curl-7.32.0curl-7.32.0lib目录里面
    (可以自定义,只要注意后面库包含时的变量就可以了)

    2.8 创建两个环境变量 

    例如 CURL_INC设置为C:curl-7.32.0curl-7.32.0include
    例如 CURL_LIB设置为C:curl-7.32.0curl-7.32.0lib



    三 结果测试

    3.1 然后开始测试如何使用。
       
    为了测试lib文件,新建一个控制台程序,

    打开工程属性 > CC++ > 常规 >包含头文件$(CURL_INC)
    打开工程属性 > CC++ > 常规 >包含库文件$(CURL_LIB)debug
    (此处注意debug和release不同,以免影响后期工程调试)
    3.2 

    打开工程属性 > CC++ > 预处理器 > 预处理器定义。添加"CURL_STATICLIB"。

    这样,那些接口函数就不会被声明为导出函数了

    3.3 添加依赖库文件


    3.4 找个自带的例子测试 /docs/examples/simple.c源文件

    [cpp] view plaincopyprint?

    1. #include "stdafx.h"  

    2. #include <stdio.h>  

    3. #include <curl/curl.h>    

    4.   

    5. #pragma comment(lib,"libcurl.lib")  

    6.   

    7. int _tmain(int argc, _TCHAR* argv[])  

    8. {  

    9.     CURL *curl;  

    10.     CURLcode res;  

    11.   

    12.     curl = curl_easy_init();  

    13.     if(curl) {  

    14.         curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");  

    15.         /* example.com is redirected, so we tell libcurl to follow redirection */  

    16.         curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);  

    17.   

    18.         /* Perform the request, res will get the return code */  

    19.         res = curl_easy_perform(curl);  

    20.         /* Check for errors */  

    21.         if(res != CURLE_OK)  

    22.             fprintf(stderr, "curl_easy_perform() failed: %s ",  

    23.             curl_easy_strerror(res));  

    24.   

    25.         /* always cleanup */  

    26.         curl_easy_cleanup(curl);  

    27.     }  

    28.     return 0;  

    29. }  



    3.5 实例测试结果

    文章二:libcurl在vs2013下C++项目中的编译连接

    现在我的需求是要把libcurl port入自己的程序里。

    首先我是参照下面的博客去做的:

    http://blog.csdn.net/atceedsun/article/details/40581247

    感谢这位作者。

    特别说明一下,

    1)我现在使用的是7.39.0的版本,在这个版本里已经有vs2012的工程文件了,在vs2013中也直接打开就可以了。

    2)同样的理由7.39.0版本中,工程文件已经有了调整,博客中的2.2不需要再修改。

    3)我需要的是dll库,但是工程默认的设置是编译出lib库,如果只是需要lib库,不需要设置太多,上述博客中的2.3项,在7.39.0版本中默认就是加入了CURL_STATICLIB宏的。

    其它东西都按上述博客去做基本都没问题,最后我还是出现了一个小状况,引入了libcurl之后,自己的代码反而编译出错了。出现下述的错误:

    [cpp] view plaincopy
     
    1. 3>d:program files (x86)microsoft visual studio 12.0vcincludexiosbase(116): error C2065: '_SH_DENYNO' : undeclared identifier  
    2. 3>          d:program files (x86)microsoft visual studio 12.0vcincludexiosbase(201) : see reference to class template instantiation 'std::_Iosb<int>' being compiled  


    我在网上看到也有别人有同样的问题,却没人给出解决方案,自己也折腾了不少时间。这样的情况我觉得很容易出现,因为这个头文件会被很多头文件所包含,比如iostream。

    我看了一下xiosbase.h头文件,发现这个116行定义的东西在一个叫share.h的头文件中,然后很不巧的是,libcurl里面也有一个叫share.h的文件,于是,xiosbase.h先调用了libcurl中的头文件而没有去用系统的头文件,这就跟程序搜索头文件路径的顺序相关了。

    所以呢,最终我就把系统的头文件路径放在最前面,让编译时先找系统的头文件,编译就通过了。

    终于可以继续写代码了。

  • 相关阅读:
    Tensorflow安装环境更新
    IE请求访问的设置
    eclipse安装JAVA反编译插件
    eclipse导入JDK源码
    org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported
    Linux学习笔记——使用指定的用户权限执行程序——sudo
    Linux学习笔记——查看Linux系统信息的方法
    Linux学习笔记——切换并取代用户身份命令——su
    JS实现电子时钟
    鼻炎
  • 原文地址:https://www.cnblogs.com/flylong0204/p/4723155.html
Copyright © 2020-2023  润新知