LIBCURL.LIB

http://blog.csdn.net/zhengfuzhe1124/article/details/9627893

下面主要介绍的是libcurl.lib的编译过程,这里是指支持SSH功能的lib。

对于libcurl的介绍网上已经很多了,这里我就简单的介绍一下。

1、libcurl简介

Libcurl是一个广泛应用的开源的文件传输库,它支持多种协议,包括HTTP POST, HTTP PUT, FTP 上传,以及HTTPS证书授权等,总之,很强大!

下载地址:http://curl.haxx.se/libcurl/

2、下载Libcurl库文件或者下载工程文件

     对于新手,比较推荐下载工程文件,主要是学习编译libcurl.lib的过程。官网上可以直接下载到libcurl的库文件,http://curl.haxx.se/dlwiz/?type=devel&os=Win32,这个连接就可以下载到开发包,后面再说下到这个包之后如何使用。

    我下载的是libcurl的全包,连接http://curl.haxx.se/download/curl-7.31.0.zip,版本是7.31.0,下载解压之后,可以看到有下图中的文件:


如果你是window开发环境并且使用vs进行编译,那么打开文件夹VS目录下的工程文件,你可以看到下图的工程目录:



下面主要介绍如何使用这个工程生成libcurl.lib静态库文件。

1)首先下载必要的安装包

编译libcurl工程需要两个额外的开源库以支持SSH功能,libSSH2和OpenSSL。

安装OpenSSL的必要软件:

ActivePerl,下载地址:http://www.activestate.com/activeperl/downloads

NASM,下载地址:http://www.nasm.us

OpenSSL的下载地址是http://www.openssl.org/source

安装LibSSH2:

LibSSH2的下载地址是http://www.libssh2.org

LibSSH2和OpenSSL的安装包是tar包,如果电脑上没有安装好压的话,可以下载开源的7-zip(http://www.7-zip.org)解压。

2)   按照提示安装ActivePerl和nasm。

3) 安装OpenSSL

a、解压openssl-1.0.1c.tar,这里将其解压到C盘的根目录下。

b、打开VS的命令行;开始-程序-MicroSolft Visual Studio 2008-Visual Studio tools-vs2008 命令提示;

c、将Nasm添加到环境变量。输入:path = %PATH%;C:\nasm-2.10.07

d、创建输出目录。输入:mkdir c:\openssl_lib

e、切换工作目录。输入:cd /D c:\openssl-1.0.1c

f、配置OpenSSL的安装。输入:perl Configure VC-WIN32 --prefix=c:/openssl_lib

这一过程的输出如下:



g、创建所需文件。输入:ms\do_nasm

h、编译静态库。输入:nmake -f ms\nt.mak

i、等编译结束,检测编译是否合理。输入:nmake -f ms\nt.mak test

j、安装OpenSSL到前几步指定的目录。输入:nmake -f ms\nt.mak install

ok,OpenSSL的安装到此结束,开始安装LIBSSH2。

4)安装LIBSSH2

a、解压libssh2-1.4.3.tar到C盘

b、C:\libssh2-1.4.3\win32\libssh2.dsp,打开工程文件。

如下图:



将工程设为LIB_DEBUG,并设置属性如下:

添加包含目录C:\openssl_lib\include,设置运行时库为Multi-threaded Debug DLL (/MDd)(c/c++节点的代码生成项设置),改变输出文件属性为Debug_lib\libssh2.lib,添加依赖库libeay32.lib;ssleay32.lib,添加库目录C:\openssl_lib\lib。

编译即可成功。

5)编译生成libcurl.lib

之前已经解压过文件并打开工程C:\curl-7.31.0\vs\vc8\liblibcurl.vcproj,设置属性如下:

a、添加包含目录C:\libssh2-1.4.3\include,

b、设置预处理属性:CURL_STATICLIB;USE_LIBSSH2;CURL_DISABLE_LDAP;HAVE_LIBSSH2;HAVE_LIBSSH2_H;LIBSSH2_WIN32 ;LIBSSH2_LIBRARY

c、添加库文件libssh2.lib

d、添加库目录C:\libssh2-1.4.3\win32\Debug_lib

e、设置输出文件为libcurl.lib

进行编译,成功之后,在输出目录中可以看到libcurl.lib文件。


下面要介绍的是libcurl的使用,因为我们已经有静态库文件以及所需的头文件,注意:直接从官网下载的开发包中,库文件和头文件所在目录如下图:



注意,我们这里只讲使用静态库开发。

下面将一个测试例子:

新建一个控制台工程,并设置属性如下:

添加包含文件目录C:\curl-7.31.0\include\curl,如下图



然后,添加静态库,libcurl.lib,可以将静态库拷贝到工程目录下,也可以设置库文件包含目录等。

设置预处理属性:CURL_STATICLIB

设置依赖库:libcurl.lib;ws2_32.lib

然后编写如下代码,下面代码的主要功能是下载一个文件,并显示进度:

[cpp]  view plain  copy
  1. #include "stdafx.h"  
  2. #include <conio.h>  
  3. #include <curl/curl.h>  
  4. #include <windows.h>  
  5.   
  6.   
  7. const char* URL = "http://play.91.com/Download/8480";  
  8.   
  9.   
  10. //写入下载文件  
  11. static size_t DLfilewrite(void *buffer, size_t size, size_t nmemb,  
  12.                         void *file)  
  13. {  
  14.     if (NULL == file )  
  15.         return 0;  
  16.     size_t wsize = fwrite(buffer,size ,nmemb,(FILE*)file);  
  17.       
  18.     return wsize;  
  19. }  
  20. //下载进度回调  
  21. static int libcurl_progress_callback (void * clientp, double dltotal, double dlnow,  
  22.                                double ultotal, double ulnow)  
  23. {  
  24.     static DWORD lastTime = GetTickCount();  
  25.     DWORD curTime = GetTickCount();  
  26.     if (curTime - lastTime < 1000)  
  27.     {  
  28.         return 0;  
  29.     }  
  30.     printf("Downloaded: %d / %d\n", (int) dlnow, (int) dltotal);  
  31.     lastTime = curTime;  
  32.     return 0;  
  33. }  
  34. int _tmain(void)  
  35. {  
  36.     CURL* curl;  
  37.     CURLcode res;  
  38.   
  39.   
  40.     //创建保存数据的文件  
  41.     FILE* pFile = NULL;  
  42.     pFile = fopen("8480.apk","wb+");  
  43.     if (NULL == pFile)  
  44.         return 0;  
  45.   
  46.   
  47.     //初始化  
  48.     curl_global_init(CURL_GLOBAL_DEFAULT);  
  49.   
  50.   
  51.     curl = curl_easy_init();  
  52.     if ( curl )  
  53.     {  
  54.         //设置URL  
  55.         curl_easy_setopt(curl,CURLOPT_URL,URL);  
  56.   
  57.   
  58.         //设置  
  59.         curl_easy_setopt(curl,CURLOPT_VERBOSE,TRUE);  
  60.   
  61.   
  62.         //设置重定向  
  63.         curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,TRUE);  
  64.           
  65.         //设置写文件的函数  
  66.         curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,DLfilewrite);  
  67.   
  68.   
  69.         //设置文件  
  70.         curl_easy_setopt(curl,CURLOPT_WRITEDATA,pFile);  
  71.   
  72.   
  73.         //SSH  
  74.         curl_easy_setopt(curl,CURLOPT_SSH_AUTH_TYPES,CURLSSH_AUTH_AGENT);  
  75.           
  76.         //设置读取进度读取回调函数  
  77.         curl_easy_setopt(curl,CURLOPT_PROGRESSFUNCTION,libcurl_progress_callback);  
  78.         curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);  
  79.         curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);  
  80.   
  81.   
  82.         //执行下载  
  83.         res = curl_easy_perform(curl);  
  84.   
  85.   
  86.         //清理  
  87.         curl_easy_cleanup(curl);  
  88.   
  89.   
  90.         if (CURLE_OK != res)  
  91.         {  
  92.             printf("download error! errorcode is %d\n!",res);  
  93.         }  
  94.     }  
  95.       
  96.     //关闭文件  
  97.     fclose(pFile);  
  98.     return 0;  
  99. }  
欧了!
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值