注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

永恒的遗失古都-亚特兰蒂斯

一个游戏开发者的个人博客。

 
 
 

日志

 
 

Windows下VC编译Libcurl(带Openssl)  

2017-10-02 14:05:28|  分类: c++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
网上有一堆方式,各自有坑,自己亲测记录在下。就一个https,至于吗……
------
1: 从 https://www.openssl.org/source/ 下载OpenSSL
建议使用Long term supports(LTS)版本,这个版本会长期有人维护支持。而stable版本即使出现BUG,也仅会在下一版本进行修复。
我使用的是 openssl-1.0.2l(LTS)版本。
2:编译OpenSSL需要依赖ActivePerl,从 http://downloads.activestate.com/ActivePerl/releases/ 这里下载
我使用的是5.26.0.2600
3:编译OpenSSL需要依赖Nasm,从 http://www.nasm.us 这里下载,安装后需要将 nasm.exe 加入环境变量
4:使用VS的 X86 本机工具命令提示工具
5:cd 到openssl-1.0.2l文件夹中
6:命令行输入 perl Configure VC-WIN32 no-asm
7: 命令行输入 ms\do_ms.bat
8: 命令行输入 nmake -f ms/nt.mak     (静态库,若动态库可使用 ms/ntdll.mak)
9: 等待成吨的编译,若中间出错,请务必删除整个openssl-1.0.2l文件夹再做调整编译,否则会出现难以理解的错误提示。
10: 编译完毕,命令行输入 nmake -f ms/nt.mak test
11: 若成功,则会在命令窗口最后输出 passed all tests
12: 从 https://curl.haxx.se/download.html 下载LibCurl,我使用的是curl-7.55.1
13: 将 openssl-1.0.2l -> inc32 -> openssl 所有的.h 和 openssl-1.0.2l -> out32 的 libeay32.lib ssleay32.lib 一起复制到 curl-7.55.1 -> lib -> openssl 中
14: 打开LibCurl的Projects目录下的windows目录,找到对应的VS版本文件夹,打开里面的curl-all.sln
15: 将Libcurl设置为启动项目,并修改编译选项为 lib release - lib openssl
16: 注意设置该项目的预处理器为 BUILDING_LIBCURL      CURL_STATICLIB     USE_OPENSSL,三个一个都不要少。
17:编译完毕后可以进行test测试是否编译正常了
18:创建一个新控制台工程,TestLibcurl,将curl的头文件8个,以及编译出来的libcurl.lib 还有openssl的两个lib(libeay32.lib ssleay32.lib)拷贝到TestLibcurl工程内
19:设置TestLibcurl的预处理器添加 CURL_STATICLIB  USE_OPENSSL 这两个预定义,设置好附加头目录,库目录和依赖项
20:测试代码如下:
#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;
}
21:如果控制台输出了baidu的网页源码那就说明成功了,因为如果没有openssl的正确编译链接,是无法访问https的。

  评论这张
 
阅读(18)| 评论(3)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017