libCURL开源库在VS2010环境下编译安装,配置详解
libCURL开源库在VS2010环境下编译安装,配置详解
转自:http://my.oschina.net/u/1420791/blog/198247
http://blog.csdn.net/sunnyleevip/article/details/41038559
文章一:CURL开源库VS2010环境下编译安装,配置详解
一 准备
1.1 CURL官网下载地址:http://curl.haxx.se/download.html
1.2 找到源码包,我这里下载的是7.32.0版:http://curl.haxx.se/download/curl-7.32.0.zip
二 步骤
2.1
打开curl-7.32.0\vs\vc8\lib\vc8libcurl.vcproj文件,VS会提示升级工程,下一步即可
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必须依赖的。
2.5.把"libcurl.rc"从工程中移除,它只是版本信息,只会增大文件,去掉!(无所谓)
2.6 可编译出如下版本,根据需要手动设置编译
libcurld.lib //debug Multi-threaded (/MT)
libcurl.dll //release Multi-threaded Debug (/MTd)
//以上为静态库版本,生成exe体积大,包含库。
生成两种版本的均可。但是连接使用的时候注意对应版本。
libcurld.lib //debug Multi-threaded DLL Debug (/MDD)
libcurl.dll //release Multi-threaded DLL (MD)
//以上为动态库版本,生成exe体积小,不包含库。
2.7 然后将其分别放入自己创建一个debug和一个release文件夹内、
例如debug/libcurl.lib release//libcurl.lib
debug/libcurl.dll release//libcurl.dll
注意将其放入C:\curl-7.32.0\curl-7.32.0\lib\目录里面
(可以自定义,只要注意后面库包含时的变量就可以了)
2.8 创建两个环境变量
例如 CURL_INC设置为C:\curl-7.32.0\curl-7.32.0\include
例如 CURL_LIB设置为C:\curl-7.32.0\curl-7.32.0\lib
三 结果测试
3.1 然后开始测试如何使用。
为了测试lib文件,新建一个控制台程序,
打开工程属性 > C\C++ > 常规 >包含头文件$(CURL_INC)
打开工程属性 > C\C++ > 常规 >包含库文件$(CURL_LIB)\debug
(此处注意debug和release不同,以免影响后期工程调试)
3.2
打开工程属性 > C\C++ > 预处理器 > 预处理器定义。添加"CURL_STATICLIB"。
这样,那些接口函数就不会被声明为导出函数了
3.3 添加依赖库文件
3.4 找个自带的例子测试 /docs/examples/simple.c源文件
[cpp] view plaincopyprint?
#include "stdafx.h"
#include <stdio.h>
#include <curl/curl.h>
#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 实例测试结果
文章二:libcurl在vs2013下C++项目中的编译连接
现在我的需求是要把libcurl port入自己的程序里。
首先我是参照下面的博客去做的:
http://blog.csdn.net/atceedsun/article/details/40581247
感谢这位作者。
特别说明一下,
1)我现在使用的是7.39.0的版本,在这个版本里已经有vs2012的工程文件了,在vs2013中也直接打开就可以了。
2)同样的理由7.39.0版本中,工程文件已经有了调整,博客中的2.2不需要再修改。
3)我需要的是dll库,但是工程默认的设置是编译出lib库,如果只是需要lib库,不需要设置太多,上述博客中的2.3项,在7.39.0版本中默认就是加入了CURL_STATICLIB宏的。
其它东西都按上述博客去做基本都没问题,最后我还是出现了一个小状况,引入了libcurl之后,自己的代码反而编译出错了。出现下述的错误:
- 3>d:\program files (x86)\microsoft visual studio 12.0\vc\include\xiosbase(116): error C2065: '_SH_DENYNO' : undeclared identifier
- 3> d:\program files (x86)\microsoft visual studio 12.0\vc\include\xiosbase(201) : see reference to class template instantiation 'std::_Iosb<int>' being compiled
我在网上看到也有别人有同样的问题,却没人给出解决方案,自己也折腾了不少时间。这样的情况我觉得很容易出现,因为这个头文件会被很多头文件所包含,比如iostream。
我看了一下xiosbase.h头文件,发现这个116行定义的东西在一个叫share.h的头文件中,然后很不巧的是,libcurl里面也有一个叫share.h的文件,于是,xiosbase.h先调用了libcurl中的头文件而没有去用系统的头文件,这就跟程序搜索头文件路径的顺序相关了。
所以呢,最终我就把系统的头文件路径放在最前面,让编译时先找系统的头文件,编译就通过了。
终于可以继续写代码了。
libCURL开源库在VS2010环境下编译安装,配置详解的更多相关文章
- libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)
转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程) 转载:https://my.oschina.net/u/14207 ...
- windows环境下tensorflow安装过程详解
写在最前: 在安装过程中遇到很多坑,一开始自己从官网下载了Python3.6.3或者Python3.6.5或者Python3.7.1等多个版本,然后直接pip install tensorflow或者 ...
- Boost学习总结(一)VS2010环境下编译STLport和Boost
Boost学习总结(一)VS2010环境下编译STLport和Boost Boost简介 Boost库是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库.1998年,Beman G.Da ...
- Redhat环境下编译安装Google Bazel
Redhat环境下编译安装bazel 作者:Jack47 目前Google Bazel没有提供各个操作系统下的二进制安装包,只提供源代码,需要我们自己编译安装,详情可以见我翻译的中文版Google B ...
- centos7.6环境下编译安装tengine-2.2.2的编译安装
centos7.6环境下编译安装tengine-2.2.2的编译安装 .获取tengine2..2的源码包 http://tengine.taobao.org/download/tengine-2.2 ...
- linux环境下/etc/hosts文件详解
linux环境下/etc/hosts文件详解 就没一个昵称能用关注 0.0632017.09.12 17:04:28字数 623阅读 27,096 介绍 hosts文件是linux系统中负责ip地址与 ...
- linux PHP 编译安装参数详解
linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...
- Ubuntu1604环境下编译安装mariadb10.2.26
环境准备:阿里云ecs Ubuntu1604下,编译安装mariadb10-2.26 1.先安装一些初试环境所需要的工具软件包 apt install -y iproute2 ntpdate tcpd ...
- Ubuntu16.04LTS 环境下编译安装Xen
一.编译安装xen4.6过程 操作系统使用ubuntu16.04,通过下载xen4.6的源代码并编译安装来创建xen4.6环境. 一.依赖包的安装 sudo apt-get install gcc m ...
随机推荐
- Windows下C编程获取软件安装列表信息
代码如下: #include <windows.h> #include <stdio.h> #include <iostream> #include <vec ...
- toast组件小结
简介:toast是"吐司"的意思,它属于android杂项组件,是一个简单的消息提示框,类似于javascript中的alert. 作用 显示文本 显示图片 显示图文 3.常用方法 ...
- 读《Android编程权威指南》
因为去年双十二购买了一折的<Android 编程权威指南(第一版)>,在第二版出来后图灵社区给我推送了第二版的优惠码,激动之余就立马下单购买电子书,不得不说Big Nerd Ranch G ...
- 常用正则表达式整理[JavaScript]
URL /^(http\:\/\/|https\:\/\/)(.{4,})$/ 18位身份证号 //前17位数字,末位支持X/^\d{17}\d{1}$|^\d{17}x{1}$/ 手机号 //11位 ...
- 算法练习_图的连通性问题(JAVA)
一.问题 1.问题描述: 有n个点(1...n),输入整数对(8,9),表示8,9点之间存在相互的连接关系. 动态连通性问题--编写一段程序过滤掉所以无意义的整数对,即为在不破坏图连通性的前提下,以最 ...
- 用ip来获得用户所在地区信息
淘宝api: package com.ebways.mq.utils; import com.alibaba.fastjson.JSON; import com.ebways.common.utils ...
- markdown博文测试
一级标题 二级标题 正文 三级标题 C代码: // code #include <stdio.h> int main() { printf("Hello, World!\n&qu ...
- C#版BitStream 1.0
根据C++版的改编,刚刚改完,估计使用会有问题,对于uint8处理的不好 关于使用: BitStream bs = new BitStream( ); bs.WriteInt32( ); int a ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- CodeForces 589J Cleaner Robot
题目链接 题意:一个机器人打扫卫生,URDL代表初始时机器人面对的方向上右下左. ' . ' 代表可以打扫的, ' * ' 代表家具,如果机器人遇到家具就顺时针转90度,问机器人能打扫多少面积. 题解 ...