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的更多相关文章

  1. VC++中开发汇编语言(转)

    汇编程序结构 一个显示字符串的汇编程序 程序格式 一.模式定义 二.includelib语句 三.函数声明语句 四.数据和代码部分 Visual C/C++环境 建立工程 汇编程序的调试 一.设置断点 ...

  2. 【转载】怎样在C++工程中集成C#窗口

    原文:http://www.cnblogs.com/clever101/archive/2009/12/14/1624204.html 本文转自博客园,此文作者依据codeproject英文版本翻译! ...

  3. vc中nmake.exe cl.exe 的使用

    首先简单介绍一下程序是如何编译链接的.程序写好之后,我们进行编译和链接来产生可执行程序.这时候,编译器为了完成编译和链接,需要知道很多信 息.比如要编译的文件是哪一个,使用哪些编译选项进行编译,编译好 ...

  4. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

  5. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  6. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  8. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  9. 如何在ios中集成微信登录功能

    在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...

随机推荐

  1. Const和ReadOnly

    总结一下const和readonly有这么几条区别: const和readonly的值一旦初始化则都不再可以改写: const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初 ...

  2. 强制关闭myeclipse出现的问题

    重启时,可能会出现打不开关闭前所在的workspace.其他workspace可以正常打开. 今天遇到这个问题,以前就遇到过,但是忘记如何解决了.今天在我等了十多分钟后,神奇的myeclipse自己起 ...

  3. iOS7初体验(2)——单元测试

    在Xcode 4.6及以前的版本,一直觉得单元测试这部分功能做得很鸡肋,用起来感觉很别扭.这一次Xcode 5.0默认就引入了单元测试,赶快来看看看相比以前的版本有什么提升吧!~_~ 1.     首 ...

  4. 使用EasyUI导入的js顺序

    使用Jquery Easy UI要导入的js顺序<1>.引用Jquery的Js文件<script src="jquery-easyui-1.3.4/jquery-1.8.0 ...

  5. Asp与Asp.Net的区别

    今天在网上看到一位朋友问asp与asp.net的区别.编辑本人也是从asp转型到.net来的,几年了,几乎都忘记了asp的存在,也说不出它们之间的区别,因为感觉两者是根本就没有联系,非要说有联系,那就 ...

  6. request.getSession()

    request.getSession(); 与request.getSession(false);区别 服务器把session信息发送给浏览器   浏览器会将session信息存入本地cookie中 ...

  7. html中发送邮箱的链接

  8. Fedora 18 安装前指南

    Secure Boot 与 Win 8   随着 Win8 的发布,先前关于 Secure Boot 和 UEFI 的诸多猜测也得到了证实,Fedora 18 也将如同当初计划的那样使用 shim + ...

  9. nginx 编译选项

    内容有些多,一眼看来难免头昏脑胀,但坚持看完,相信你一定会有所收获. nginx参数: --prefix= 指向安装目录 --sbin-path 指向(执行)程序文件(nginx) --conf-pa ...

  10. South入门教程

    对于django自带的syncdb同步models和数据库的缺陷,所以我选择第三方的工具South. 1.安装South:pip install South 2.South设置: 把 south 加到 ...