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 plaincopy
  1. #include "stdafx.h"
  2. #include <conio.h>
  3. #include <curl/curl.h>
  4. #include <windows.h>
  5. const char* URL = "http://play.91.com/Download/8480";
  6. //写入下载文件
  7. static size_t DLfilewrite(void *buffer, size_t size, size_t nmemb,
  8. void *file)
  9. {
  10. if (NULL == file )
  11. return 0;
  12. size_t wsize = fwrite(buffer,size ,nmemb,(FILE*)file);
  13. return wsize;
  14. }
  15. //下载进度回调
  16. static int libcurl_progress_callback (void * clientp, double dltotal, double dlnow,
  17. double ultotal, double ulnow)
  18. {
  19. static DWORD lastTime = GetTickCount();
  20. DWORD curTime = GetTickCount();
  21. if (curTime - lastTime < 1000)
  22. {
  23. return 0;
  24. }
  25. printf("Downloaded: %d / %d\n", (int) dlnow, (int) dltotal);
  26. lastTime = curTime;
  27. return 0;
  28. }
  29. int _tmain(void)
  30. {
  31. CURL* curl;
  32. CURLcode res;
  33. //创建保存数据的文件
  34. FILE* pFile = NULL;
  35. pFile = fopen("8480.apk","wb+");
  36. if (NULL == pFile)
  37. return 0;
  38. //初始化
  39. curl_global_init(CURL_GLOBAL_DEFAULT);
  40. curl = curl_easy_init();
  41. if ( curl )
  42. {
  43. //设置URL
  44. curl_easy_setopt(curl,CURLOPT_URL,URL);
  45. //设置
  46. curl_easy_setopt(curl,CURLOPT_VERBOSE,TRUE);
  47. //设置重定向
  48. curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,TRUE);
  49. //设置写文件的函数
  50. curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,DLfilewrite);
  51. //设置文件
  52. curl_easy_setopt(curl,CURLOPT_WRITEDATA,pFile);
  53. //SSH
  54. curl_easy_setopt(curl,CURLOPT_SSH_AUTH_TYPES,CURLSSH_AUTH_AGENT);
  55. //设置读取进度读取回调函数
  56. curl_easy_setopt(curl,CURLOPT_PROGRESSFUNCTION,libcurl_progress_callback);
  57. curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
  58. curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
  59. //执行下载
  60. res = curl_easy_perform(curl);
  61. //清理
  62. curl_easy_cleanup(curl);
  63. if (CURLE_OK != res)
  64. {
  65. printf("download error! errorcode is %d\n!",res);
  66. }
  67. }
  68. //关闭文件
  69. fclose(pFile);
  70. return 0;
  71. }

欧了!

LIBCURL.LIB相关推荐

  1. LINK : fatal error LNK1181: cannot open input file “libcurl.lib“

    接手技术顾问的一个老项目,VC6.0,编译项目,提示: LINK : fatal error LNK1181: cannot open input file "libcurl.lib&quo ...

  2. libcurl.lib 导入问题 须知

    vc2008构建和使用libcurl静态库 http://blog.csdn.net/mos2046/article/details/7697530 1>下载CURL源代码curl-7.26.0 ...

  3. linux libcurl 库使用方法

    一.ibcurl简介 作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, I ...

  4. libcurl post数据

    libcurl post数据是经常用到的操作 以学校论文指导系统登录为例,网址:http://xxxy.hbmy.edu.cn/admin.php?mod=papers&file=index ...

  5. windows的libcurl下zlib1.dll问题

    libcurl是一个轻量级的http包,免去了我们自己写http协议的麻烦. 但是下载下来之后,调试的时候会出现zlib1.dll问题,在网上下载了几个zlib.dll都不行,win7下面和xp下面都 ...

  6. windows 下编译libcurl,通过url下载图片数据

    windows 下编译libcurl 因为linux平台采用了libcurl,有一个程序移植到到windows平台,再linux采用libcurl.在windows下准备也采用该库.在网上搜索了几位同 ...

  7. 使用 libcurl 在windows平台遇到的问题

    1. 遇到如下问题 1>libcurl.lib(easy.obj) : error LNK2001: 无法解析的外部符号 __imp_WSAStartup 1>libcurl.lib(te ...

  8. libcurl 库的编译

    因为要用到 libcurl 库的接口进行练习,而现在手上只有curl相关的头文件,那没办法只能下载源码进行编译了,这里记录一下编译 x86 与 hisi dv300 版本的动态库. 根据头文件 cur ...

  9. 使用libcurl库把域名转化IP

    环境 vs2005及win7 代码 int DomainToIP(const char *domain, string &out) {if (domain == NULL){return -3 ...

  10. VC2013下使用64位libcurl(包含zlib1、ssleay32等)

    VC2013下,使用curl 最近在搞一个项目,需要用的curl.因为使用windows下面开发比较习惯,于是用它了.然并不是一帆风顺的. 先去官网下载curl.我先下下载了libcurl-7.19. ...

最新文章

  1. 谷歌AutoML鼻祖Quoc Le新作AutoML-Zero:从零开始构建机器学习算法
  2. [webapi] 如何在查看api时 显示api的说明
  3. linux学习中遇到的各种故障与解决方法
  4. Java IO在Android中应用(三):Apk加固去壳
  5. linux 下 iscsi的简单使用
  6. vim学习(2)小幅提升
  7. Taro+react开发(17)--注意编译
  8. 系统架构设计师含金量_软考高级系统架构设计师如何备考?
  9. mysql not null 索引_MySQL中 IS NULL、IS NOT NULL、!= 能用上索引吗?
  10. Memento - 备忘录模式
  11. estimator 模型保存与使用
  12. [Linux] linux命令总结之dig命令
  13. [玩转UE4动画系统>基础篇] 之 什么是射线检测
  14. 哈佛幸福课 24人格力量测试
  15. Packet Tracer 和 Wirshark 抓取数据包
  16. TeamViewer 可信设备的信任管理
  17. gimp 架构_[翻译]如何编写GIMP插件(二)
  18. VB程序启动后如何在通知区域显示
  19. 【TouchDesigner学习笔记与资料】
  20. 机器学习实战中的心得体会

热门文章

  1. 阿里云数据盘扩容和挂载
  2. 小程序从数组中删除指定对象,返回新的长度源代码
  3. #树形dp#洛谷 2014 codevs 1378 jzoj 1486 选课
  4. 个人业务存在的开票和个税问题,自然人代开核定征收解决
  5. 解决:adb devices error protocol falut(no status)
  6. Java 去除字符串中的空白字符
  7. Codeforces-936B Sleepy Game
  8. Unity 遮挡剔除
  9. 推荐一个 github 项目 spider163,抓取网络数据,歌曲评论等数据
  10. python语言工具_可爱的 Python