在VC中集成cURL
libcurl 库的代码是完全开源的,但是我们一般不会在项目中直接引入它的源代码,而是通过动态链接库隐式链接的方式引入 libcrul 库。也就是说,我们需要在自己的项目中引入 libcrul 相关的三类文件:.lib(导出函数)、.dll 和 .h。
要得到这些文件有两种方式:
方式一,也是推荐优先尝试的做法,到官网下载页面上根据自己的项目开发环境,下载对应的已经编译好的 libcurl 库文件;
方式二,还是到官网下载页面上,下载整个 libcurl 库的源代码自行编译,得到需要的文件。
官网首页:http://curl.haxx.se
官网下载页面:http://curl.haxx.se/download.html
下面分别描述一下两种方式的优缺点和操作步骤。
方式一:到官网下载页面下载对应的已经编译好的 libcurl 库文件
方式一的优点是操作简单,拿来主义,把下载好的压缩包一解压,复制粘贴就可以直接用了。缺点是官网上所提供的这种由第三方开发者编译好的库文件,估计也是热心网友或者开源项目组成员好心上传上去的,因此它们与 libcurl 库未必是同步更新的,比如 2012 年六一儿童节当天,我在官网上下载的 Win32 - MSVC 编译生成库对应的 libcurl 版本是 7.25.0,而最新的 libcurl 版本已经更新到了 7.26.0。另外还有个比较坑爹的地方是,这些由第三方开发者自行编译上传的库文件,质量参差不齐,我就试过引入某个版本的库文件之后,导致自己的程序运行时发生 Crash。
操作步骤:
(1) 进入官网下载页面

(2) 在右侧选择要使用 libcurl 的开发环境

(3) 选择适合的编译生成库
我正在的开发的这个项目主要是使用 libcurl 来做一些腾讯微博开放平台的 API 调用(基于 HTTP),并不需要使用到 SSL 传输(比如 HTTPS和FTPS),所以我选择的是不带 SSL 支持编译的版本。

方式二:到官网下载页面下载整个 libcurl 库的源代码自行编译,得到需要的文件
方式二的优点是你想怎么着都行,缺点是操作比较繁琐。libcurl 是可以定制编译的,你可以根据实际需要是否支持某些特性,但这也带来了操作上的麻烦。比如说如果你开启了 OpenSSL 支持,那你就需要先自行引入 OpenSSL 这个第三方库,才能开始 libcurl 的编译,又比如你开启了 ZLib 支持,那你又必须先搞定 ZLib 这个第三方库。
实际操作的时候,你会发现像 OpenSSL 和 ZLib 这些第三方库的编译又是一件非常繁琐的事情。所以下面我只谈 libcurl 的编译。
你可以直接用 Visual Studio 编译 libcurl
如果不需要zlib跟OpenSSL,下载完整的 libcurl 代码库之后,直接用 Visual Studio 打开自带的 vc6curl.dsw 打开编译就可以了。
使用 VC6 编译的时候可能会遇到下面这个错误提示,这是因为 VC6 默认安装的 Platfomr SDK 比较老:
fatal error C1189: #error : MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. "Windows Server 2003 PSDK"
可以通过 ALLOW_MSVC6_WITHOUT_PSDK 这个编译宏来屏蔽强制使用 February 2003 Platform SDK 编译,步骤如下:
- 在 VC6 的主菜单选择 Project->Settings... 调出工程设置窗口;
- 在 Settings For 中选择 All Configurations;
- 在 C/C++ 标签页的 Category 中选择 General,在 Preprocessor definitions 中追加 ALLOW_MSVC6_WITHOUT_PSDK。
你还可以用命令行来编译 libcurl
这个在“代码包根目录\winbuild\BUILD.WINDOWS.txt” 里面有很详细的说明。值得一提的是,BUILD.WINDOWS.txt 中对 USE_SSPI 编译选项的描述有误,多了一个 S。
USE_SSSPI=<yes or no> - Enable SSPI support, default to yes
以 VS2010 为例说明命令行编译的步骤:
- 调出命令行窗口,Windows 开始菜单 -> 所有程序 -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)

- 进入代码包中的 winbuild 目录

- 输入编译命令行: nmake /f Makefile.vc mode=dll VC=10 USE_SSPI=no USE_IPV6=no USE_IDN=no GEN_PDB=no DEBUG=no

- 编译完毕之后,进入以下路径“\builds\libcurl-release-dll”即可得到我们需要 .lib、.dll 和 .h 文件。
在VC中集成cURL的更多相关文章
- VC++中开发汇编语言(转)
汇编程序结构 一个显示字符串的汇编程序 程序格式 一.模式定义 二.includelib语句 三.函数声明语句 四.数据和代码部分 Visual C/C++环境 建立工程 汇编程序的调试 一.设置断点 ...
- 【转载】怎样在C++工程中集成C#窗口
原文:http://www.cnblogs.com/clever101/archive/2009/12/14/1624204.html 本文转自博客园,此文作者依据codeproject英文版本翻译! ...
- vc中nmake.exe cl.exe 的使用
首先简单介绍一下程序是如何编译链接的.程序写好之后,我们进行编译和链接来产生可执行程序.这时候,编译器为了完成编译和链接,需要知道很多信 息.比如要编译的文件是哪一个,使用哪些编译选项进行编译,编译好 ...
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案
C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)
目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 + 示例登陆帐号) 4. jqGrid和AJAX 5. GridSettings 6. ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 如何在ios中集成微信登录功能
在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...
随机推荐
- datazen 修改instanceid db_encryption_key
切换到Datazen.Enterprise.Server.3.0.3327.exe 所在的目录 运行如下命令: Datazen.Enterprise.Server.3.0.3327.exe DATAZ ...
- 在Java控制台模拟dos命令下操作MySQL
一.导入mysql的驱动:"com.mysql.jdbc.Driver", 必须将mysql的驱动 包(jar文件)导入到本工程中. Class.forName("com ...
- POJ刷题记录 (。・`ω´・)(Progress:6/50)
1743:前后作差可以转化成不可重叠最长公共字串问题,运用后缀数组解决(参考罗穗骞神犇的论文) #include <cstdio> #include <cstring> #in ...
- 【BZOJ1861】【splay】Book 书架
Description 小 T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿 ...
- Android三种菜单简介
Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu). 一.选项菜单 用户点击设备上的菜单按钮(Menu),触发事件 ...
- 用Python高亮org-mode代码块
文章同时可在我的github blog上阅读:http://cheukyin.github.io/python/2014-08/pygments-highlight-src-export-html.h ...
- CSS3 Animation学习笔记
Internet Explorer 9,以及更早的版本, 不支持 @keyframe 规则或 animation 属性. Internet Explorer 10.Firefox 以及 Opera 支 ...
- <select>与<datalist>的区别
size:下拉框中每次出现选项的个数 multiple:可以一次性选多个选项: disabled:时下拉框不可用,无法点击选项 list:它的值应于id的值对应 datalist要与input标签一 ...
- mysql中显示方式的切换
1. mysql中如果使用\G,则':'不用写.如果\G后面跟':'则会报"error:no query specified"错误.请知晓. 2. mysql在登陆时,mysql ...
- 使用$.getJSON实现跨域ajax请求
jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callba ...