Windows 编译libcurl(openssl+zlib)(使用VC编译)

解压

为了方便安装,在D盘根目录下新建一个名为libcurl-ssl的文件夹,将下载的三个压缩包解压到该文件夹。
在 curl-7.54.0 -> lib 下新建文件夹openssl用来存放openssl的头文件。

zlib编译:
  1. zlib-1.2.11\contrib\vstudio\vc14\zlibvc.sln,编译release版本。
  2. 在生成的x86\ZlibDllRelease文件夹中有zlibwapi.dll和zlibwapi.lib文件
ActiveState安装:

打开安装包,选择Modify默认安装或Repair修改安装路径都可以

openssl编译:

这是最麻烦、最容易出错的一环了,因为他没有项目文件,只能通过命令行来编译。

  1. 在开始菜单中找到vs自带的 VS2015 x86 本机工具命令提示符
  2. 使用cd命令进入到openssl-1.0.2k文件夹中
  3. 命令行键入 perl Configure VC-WIN32 no-asm
  4. 命令行键入 ms\do_ms.bat
  5. 命令行键入 nmake -f ms/ntdll.mak

等待差不多五分钟,只要不出现“stop”,安全地执行到结束,就算成功。
一旦中间出了差错,最好是把文件夹也删了,重新解压、配置编译,如果你留有编译失败的半成品,它可能会告诉你“无法解析XXX”。

将 openssl-1.0.2k -> inc32 -> openssl 所有的.h 和 openssl-1.0.2k -> out32dll 的 libeay32.lib、libeay32.dll、ssleay32.lib、ssleay32.dll 一起复制到 curl-7.54.0 -> lib -> openssl 中

libcurl编译:

编译平台选择 DLL Debug - DLL OpenSSL

  1. curl-7.54.0 ->projects -> Windows -> VC14 -> curl-all.sln,可能会提示升级工程,确定即可。
  2. 将 libcurl 设为启动项目,选择 libcurl -> Resource Files -> libcurl.rc,右键“移出”,它记录着版本信息,只会增大文件,可以移出掉。
  3. 选择 属性 -> C/C++ -> 预处理器 -> 预处理器定义,将"BUILDING_LIBCURL"改成"CURL_STATICLIB"。这样那些接口函数就不会被声明为导出函数了。
  4. 选择 属性 -> 链接器 -> 常规 -> 附加库目录 添加 ..\..\..\..\lib\openssl,指向curl-7.54.0 -> lib -> openssl
  5. 选择 属性 -> 链接器 -> 输入 -> 附加依赖项 添加 libeay32.lib;ssleay32.lib;ws2_32.lib;wldap32.lib; 前两个是为了OpenSSL,后两个是CURL必须依赖的。

在编译成功后 curl-7.54.0 -> build -> Win32 -> VC14 -> DLL Debug - DLL OpenSSL 文件夹中会生成有 libcurld.dll 和 libcurld.lib(注意名字不是libcurl)。

创建控制台应用程序

例如创建的项目文件夹位于 D: -> LibcurlTest,编译版本为debug X86。

  1. 新建 LibcurlTest -> include文件夹,将 curl-7.54.0 -> include 目录下的curl文件夹,复制过去。
  2. 新建 LibcurlTest -> lib 文件夹,在lib下新建debug文件夹。将libcurl编译的 libcurld.dll 和 libcurld.lib 复制到debug。
  3. 将libcurld.dll和之前OpenSSL生成的 libeay32.dll、ssleay32.dll 各复制一份到项目文件夹下,否则会报错。
  4. 选择 配置属性 -> C\C++ -> 预处理器 -> 预处理器定义,添加CURL_STATICLIB。
  5. 属性中的 附加包含目录、附加库目录和附加依赖项就在代码中实现。
测试代码
#include "stdafx.h"
#include "../include/curl/curl.h"
#pragma comment(lib,"../lib/debug/libcurld.lib")
int main()
{
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, true);
        curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        res = curl_easy_perform(curl);
        if (res != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }
        curl_easy_cleanup(curl);
    }
    system("pause");
    return 0;
}

运行结果:在控制台中显示 https://www.baidu.com 网页源码,如果没有OpenSSL的编译和链接,是不能访问https的。但是显示中文部分是乱码,本人水平有限,认为这是C++输出的问题,我将源码保存成txt打开是没问题的。

注:本文整理修改自互联网。

作者:李察丶
链接:http://www.jianshu.com/p/2a92e1f30d0c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-08-07 08:35:52

Windows 编译libcurl(openssl+zlib)(使用VC编译)的相关文章

windows下libcurl与zlib和ssl共同编译

下载了curl 7.37,在project里有各个版本VS对应的项目文件,我们选择合适的打开即可以编译,根据不同的项目配置输出想要的库,比如可以切换多种SSL库,dll/lib,debug/release等. 但是这些项目配置中没有zlib,很不方便.而官网的INSTALL文档http://curl.haxx.se/docs/install.html,也是简单的说明了如何使用MSVC命令行编译libcurl和zlib,或者libcurl和openssl,原文如下: If you want to

使用mingw 对libcURL,openSSL,zLib交叉编译

将三个库解压到同一目录下 比如取目录名为 "source" 的目录 提前安装active-perl 配置好mingw和msys环境 否则编译会出错 - source + curl-xxx + openssl-1.0.xx + zlib-xxx 1第一步 (在msys环境中执行) 编译openssl 依次输入四个指令 ./config -t ./config threads shared no-capieng make depend make 会生成 libcrypto.a libssl

Windows下VC编译OpenDDS

OpenDDS是一个OMG组织DDS标准的C++开源实现,OpenDDS同时也提供Java支持.OpenDDS依赖ACE抽象层来提供不同平台的兼容性,同时也依赖于TAO(例如TAO的IDL编译器).当前OpenDDS有ociweb ObjectComputing维护,官方网站http://www.opendds.org/.目前OpenDDS支持的平台有Windows,Linux family,Android,VxWorks等,可用的编译器包括VC,gcc,QNX gcc等. 1. OpenDDS

【Python学习】由于windows环境问题导致的不能安装某些需要VC编译的插件

由于windows环境问题导致的不能安装某些需要VC编译的插件 下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 安装方法: 在CMD中输入 pip install 下载的文件本地地址 如: pip install c:\lxml-3.4.4-cp34-none-win_amd64.whl

利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用

将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.dll 然后用下面的脚本生成Windows MSVC需要的模块定义文件(.def, .lib和.exp), 然后就可以在VC中使用了. 前提系统要安装VS. 系统要求: Windows7+VS Studio (2008 and later)+MSYS 1) 根据32位dll生成模块定义文件的pytho

自己编编译Libcurl 的缘起

原来就了解些libcurl,一直没有机会在项目实际使用libcurl.  恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中. 与服务器的通信都是基于HTTP/HTTPS协议通信.先做window下的sdk,在逐步移植到linux和MAC平台下. 在curl的官方网站 **http://curl.haxx.se/download.html** 提供编译好libcurl包,用于老外的使用的 VC++编译器过高,本人使用VC2010,所以不兼

windows下vc6.0下的OpeSSL编译过程中的问题

我的机器环境是:window7 + vs2010 + vc6.0; 其实,在windows上用VS2010以上的工具来编译Openssl源码库很简单,估计大家都测试过,用VS2008及其以上的工具编译Openssl源码库就3行代码即可: perl Configure -WIN32 --prefix=d:/openssl ms\do_ms nmake -f ms\nt.mak vc6.0版本的openssl编译步骤如下: 1.打开命令提示符,找到vc6.0所在的bin目录,输入VCVARS32.B

windows Notepad++ 上配置 vs 编译器 , 编译并运行

windows 中 配置 vs编译器 在Linux下,Kris是倾向于在终端中使用gcc和g++来编译C/C++的,在Windows下相信很多人都是选择臃肿的Visual Studio,我亦不免如此.但是,我希望在Windows下也能像Linux下一样简洁编程,于是开始了我的Windows下的C/C++命令行编译环境打造之路. 几乎没有人会否认集成开发环境 (IDE)(例如,Visual Studio,NetBeans,Eclipse)所提供的能使编程工作变得相当简单的诸多功能.但,还是说说命令

VC++ 编译过程

一 前言 以前在编译C++代码的时候对编译的错误都觉得很难理解,搞不清楚究竟是哪里错了.后来C++写多了,总结了一些经验,然后也了解了一下编译过程,但是没有系统的对编译过程进行学习,现在趁着写博客的机会,好好的把编译过程写下来,并且理顺一下这个知识点. 二 名词解释 编译单元:当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元. 目标文件:目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,此

VC编译错误:msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::t.... 已经在 libcmtd.lib(typinfo.obj) 中定义

1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "