博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libcurl开源库在VS2010环境下编译配置详解
阅读量:2392 次
发布时间:2019-05-10

本文共 3285 字,大约阅读时间需要 10 分钟。

一 准备

1.1 CURL官网下载地址:http://curl.haxx.se/download.html

1.2 找到源码包,官网最新版为7.54.0,但是这个压缩包的curl-7.54.0\projects\Windows路径下VC6-VC14各个版本的VS解决方案,但打开后编译会提示找不到openssl相关的头文件:

fatal error C1083: 无法打开包括文件:“openssl/ssl.h”: No such file or directory

应该是新增对SSL的支持,使用到了openssl,而openssl需要手动安装配置一下。配置openssl有两种方法,一种是下载安装包直接安装(就像使用WindowsSDK包一样),一种是将openssl的代码下载下来编译配置。当然是前者最简单,openssl安装配置参见:Windows下openssl的下载安装和使用。

    因为要实现发送邮件功能,网上下载的示例代码,基本没法使用,特别是网络处理这一块,邮件会经常发送失败。因为时间比较紧,要抓紧实现并测试效果,所以就没时间去配置安装openssl并编译新版本的libcurl。正好看到相关文章,得知7.32.0版本是可以直接拿来用VS2010编译的,于是到官网上去下载7.32.0版本,具体获取老版本的入口如下:

    本来因为手头的小项目急着用,以关键字curl到工程的目录中搜索,看看之前的项目中有没有libcurl库的工程,可以拿来直接编译,然后将编译出来的库拿过来直接使用,但是编译后拿到我们的工程中跑,结果curl_easy_perform接口调用失败,返回CURLE_UNSUPPORTED_PROTOCOL错误码,难道是当前的库不支持SMTP协议?按讲不应该啊,SMTP是官方支持的啊!查看代码才发现,之前有人使用CURL_DISABLE_SMTP和HTTP_ONLY宏将SMTP、FTP、telnet等不用的协议都裁剪了,只保留了主要的HTTP功能,c文件也从工程中删除了,但磁盘上还是有的。于是尝试着将SMTP等协议功能添加进来,将DISABLE宏注释掉,编译libcurl,提示链接不到SMTP模块的接口。后来发现smtp.c没有添加到工程中,即smtp.c没有编译,所以链接不到SMTP模块的接口。但是加进去后编译还是有问题,来回试了好几次还是不行,所以不得不到官网上下载新版本的libcurl,搜索libcurl的编译配置方法,只能使用官方的代码编译出库文件了。

    之前看到项目中mupdf模块也使用到了curl的代码,但也是被裁剪了,功能基本都被删完了,SMTP邮件发送模块肯定也被删除了,更是没法使用了。

二 步骤

2.1 打开curl-7.32.0\vs\vc8\lib\vc8libcurl.vcproj文件,VS2010会提示升级工程,下一步即可
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必须依赖的。或者在代码中使用#pragma comment预编译指令,手动引入这两个lib库。

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

2.6 可编译出如下版本,根据需要手动设置编译
libcurld.lib //debug      Multi-threaded Debug (/MTd)
libcurl.lib  //release    Multi-threaded  (/MT)
//以上为32位静态库版本,生成exe体积大,包含库。

生成两种版本的均可。但是连接使用的时候注意对应版本。
libcurld.lib //debug     Multi-threaded DLL Debug (/MDD)
libcurl.dll //release    Multi-threaded DLL (MD)
//以上为动态库版本,生成exe体积小,不包含库。


2.7 如果自己的工程是64位的,并且使用的是curl的静态库,那么也需要将crul的静态库也编译成64位的。编译方法很简单,新建一个平台x64,并将配置项直接从win32对应的配置项继承过来就可以了。

三 结果测试

3.1 然后开始测试如何使用。
为了测试lib文件,新建一个控制台程序,将curl下的include文件夹和刚才生成的静态库拷贝到当前工程的目录下,并设置好包含路径以及依赖库路径。(此处注意debug和release不同,以免影响后期工程调试)

3.2默认是动态库,如果要编译成静态库,则打开工程属性 > C\C++ > 预处理器 > 预处理器定义。添加"CURL_STATICLIB"。


3.3 添加依赖库文件:ws2_32.lib和wldap32.lib,这个库是libcurl需要的。

3.4 找个自带的例子测试 /docs/examples/simple.c源文件

#include "stdafx.h"      #include 
#include
#pragma comment(lib,"libcurl.lib") int _tmain(int argc, _TCHAR* argv[]) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; }

3.5 实例测试结果

PS:其实本文不能算是原创,也是在别人文章的基础上加上自己遇到的问题,修改而来的!

你可能感兴趣的文章
重识java反射
查看>>
Spring的核心中IOC、DI
查看>>
Spring中注解的使用
查看>>
Spring的认识
查看>>
gitee的使用
查看>>
maven项目出现如下错误,求指点;CoreException: Could not calculate build plan:
查看>>
理解Paxos算法的证明过程
查看>>
详解 JVM Garbage First(G1) 垃圾收集器
查看>>
Java 8 函数式编程入门之Lambda
查看>>
用高阶函数轻松实现Java对象的深度遍历
查看>>
WindowsApi+Easyx图形库的透明时钟
查看>>
Eclipse LUNA配置TomCat(非j2ee版本)
查看>>
树莓派安装mysql-srver报错 404 not found!
查看>>
Ubuntu 14.04LTS 下安装.net框架
查看>>
Ubuntu || Linux下添加程序启动器
查看>>
Ubutu 下安装putty并且连接树莓派
查看>>
Eclipse 配置Groovy语言环境 && Java工程运行Groovy
查看>>
Ubuntu 终端zsh的agnoster主题乱码
查看>>
Maven学习系列1-Get Started
查看>>
Eclipse linux 环境变量不起作用/旧环境变量始终生效
查看>>