libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)

转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程)

转载:https://my.oschina.net/u/1420791/blog/198247

转载:http://www.cnblogs.com/flylong0204/p/4723155.html

转载:http://www.tuicool.com/articles/VNRzEbq

转载:http://blog.csdn.net/hei_ya/article/details/51606799

转载:http://blog.csdn.net/zengraoli/article/details/9189449

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

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

转载:http://blog.csdn.net/mtour/article/details/40375947 (下载文件显示进度条demo)

一 准备

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.0\vs\vc8\lib\vc8libcurl.vcproj文件,VS会提示升级工程,下一步即可

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

2.2

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

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

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

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

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

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

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

libcurld.lib //debug      Multi-threaded Debug (/MTd)

因为默认生成的文件名为libcurl.dll ,所以为了让Debug和release有区别,我们在Librarian选中General,在output file 输入"$(OutDir)$(TargetName)d$(TargetExt)" ,中间多了一个字母d
 
libcurl.dll  //release     Multi-threaded (/MT)

//以上为静态库版本,生成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.0\curl-7.32.0\lib\目录里面
(可以自定义,只要注意后面库包含时的变量就可以了)

2.8 创建两个环境变量

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

三 结果测试

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

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

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

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

3.3 添加依赖库文件

LibCurl编程介绍

利用libcurl完成传输任务的流程:

1.调用curl_global_init()初始化libcurl

2.调用 curl_easy_init()函数得到 easy interface型指针

3.调用curl_easy_setopt设置传输选项

4.根据curl_easy_setopt设置的传输选项,实现回调函数以完成用户特定任务

5.调用curl_easy_perform()函数完成传输任务

6.调用curl_easy_cleanup()释放内存

在控制台程序中使用libcurl库,http请求下载文件显示进度

#include <stdio.h>

#include "StdAfx.h"

size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
  return fwrite(ptr, size, nmemb, stream);
} 

int my_progress_func(char *progress_data,
                     double t, /* dltotal */
                     double d, /* dlnow */
                     double ultotal,
                     double ulnow)
{
  printf("%s %g / %g (%g %%)\n", progress_data, d, t, d*100.0/t);
  return 0;
}

int main(int argc, char **argv)
{
  CURL *curl;
  CURLcode res;
  FILE *outfile;
  char *url = "http://192.168.1.80:603/bic/download?userId=402832a95ad64661015ad6476b800024&fileName=dbpro.war";
  char *progress_data = "* ";

  curl = curl_easy_init();
  if(curl)
  {
    outfile = fopen("dbpro.war", "wb");

    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
    curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
    curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
    curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, progress_data);

    res = curl_easy_perform(curl);

    fclose(outfile);
    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}
时间: 2024-08-06 08:16:55

libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)的相关文章

linux下IPTABLES配置详解 (防火墙命令)

linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT-A RH-Firewall-1-INPUT -s 121.10.120.24 -p tcp -m tcp --dport 18612 -j ACCEPT 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的

人脸检测开源库stasm在VS2010环境下的64位编译

stasm stasm是寻找人脸特征的C++开源库,实现了ASM模型和AAM模型.使用Stasm需要编译好的openCV. 源代码从官网下载. 辅助编译文件(CMakelists等)从这里下载. 电脑操作系统:win7 64 bit 编译方法 1. 将从官网下载的源代码解压至文件夹stasm4.1.0 2. 将辅助编译文件同样复制到文件夹stasm4.1.0下.此步完成后文件夹里内容如下: 3. 打开CMake,输入源文件地址和生成文件存放地址,点configure.示例见下图第1个框 4. 根

GDAL开源库在WIN8.1环境下的编译安装

最近因为实验需要,要在windows环境下利用GDAL进行开发,故尝试了一下编译GDAL. 参考链接1:http://blog.csdn.net/liminlu0314/article/details/6937194 参考链接2:http://malagis.com/win7-vs2010-gdal.html 首先在GDAL官网上找到了下载链接,得到了最新的1.11.2版本的源代码,解压到D盘.根据参考链接1的内容进行编译. 打开命令行,切换到GDAL源码目录,输入nmake -f makefi

开源库的使用方法以及libjpeg的移植详解

一.开源库的使用方法 (1)移植(源码下载.解压.配置.修改Makefile.编译或交叉编译).移植的目的是由源码得到三个东西:动态库.so,静态库.a,头文件.h (2)部署(部署动态库so.部署静态库.a和头文件.h) 动态库是运行时环境需要的,编译程序时不需要. 静态库是静态连接时才需要,动态链接时不需要. 头文件.h是在编译程序时使用的,运行时不需要的. 总结:静态库和头文件这两个东西,是在编译链接过程中需要的:而动态库是在运行时需要的. 所以动态库so文件是要放到开发板的文件系统中去的

phonegap安装 环境搭建与配置详解

首先介绍搭建环境的基本准备: 1 java JDK   (搜索一下.......) 2 android SDK 最新版(我当时的版本是 API 19  点击打开链接) 3 Ant 打包工具  (百度一个或者 点击打开链接) 4 eclipse   (建议使用google的  因为内置ADT     点击打开链接 ) 5 ADT (ecplise 里的插件,安卓开发工具插件     下载上面的链接,内部集成了ADT) 6 Node.js   (点击打开链接) 7 sublime  点击打开链接 ;

JDK的安装与Java环境变量的配置详解

JDK作为JAVA开发的环境,必须在电脑上安装JDK. 1.下载jdk http://rj.baidu.com/soft/detail/14459.html?ald下载jdk最新版jdk-8u11-windows-i586.1406279697, 2.进入下载界面可根据自己需要选择需要的Java版本,分别 有j2ee,Javase,Javame, 3.然后点击accept,接着在下面的下载列表中选择自己的操作系统,以及34位还是64位的进行下载 4.然后双击安装包,点击下一步 5.接着点击下一步

Linux下sshd_confi配置详解

#Port 22    指定 sshd(8) 守护进程监听的端口号,默认为 22 .可以使用多条指令监听多个端口.    默认将在本机的所有网络接口上监听,但是可以通过 ListenAddress 指定只在某个特定的接口上监听. #AddressFamily any//指定sshd(8)应当使用哪种地址族.取值范围是:"any"(默认)."inet"(仅IPv4)."inet6"(仅IPv6)'#ListenAddress 0.0.0.0List

JAVA环境变量的配置详解

安装JDK,比如目录在D:\Java\jdk1.7.0_71\bin 为了方便java程序的开发,需要配置一下环境变量,右击我的电脑->属性->高级->环境变量->用户变量中单击[新建(N)]添加以下环境变量 (假定你的JDK安装路径为D:\Java\jdk1.7.0_71\bin) JAVA_HOMEd:\Java\jdk1.7.0_71 PATHd:\Java\jdk1.7.0_71\bin CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOM

Flume环境部署和配置详解及案例大全

flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本.HDFS.Hbase等)的能力 . 一.什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera.但随着 FLume 功能的扩展,F