VS2017编译libcurl {zlib+openssl+libssh2}_编译libssh2_方与圆之帆的博客-程序员秘密

技术标签: 服务器  perl  windows  开发环境  

前言

前提条件libcurl开发库需要zlib和openssl的支持。
本文记录完整编译方案。

zlib编译

  1. 环境准备
    zlib:zlib-1.2.11 http://www.zlib.net/

  2. 步骤
    1)导入zlibvc.vcxproj (目标所在目录: xxx\zlib-1.2.11\contrib\vstudio\vc15)
    2)更改zlibvc部分属性:
    配置管理器为:x64
    【常规】->【目标文件名】内容改为zlib_zip1211;
    【C/C++】->【预处理器定义】更改ZLIB_WINAPI–>ZLIB_DLL (为了编译出的dll可以使用zip相关接口)
    【链接器】->【常规】->【输出文件】内容改为$(OutDir)$(TargetName).dll
    【链接器】->【高级】->【导入库】内容改为$(OutDir)$(TargetName).lib
    【链接器】->【调试】->【生成程序库文件】内容改为$(OutDir)$(TargetName).pdb
    【链接器】->【调试】->【映射文件名】内容改为$(OutDir)$(TargetName).map

  3. install
    本文环境统一将依赖库组织到 @统一文件夹
    zlib安装目录:@统一文件夹\zlib_zip_1_2_11_x64
    安装文件夹组织如下:
    在这里插入图片描述
    lib和bin文件夹组织如下:
    在这里插入图片描述
    include包含内容如下:
    在这里插入图片描述

openssl-1.1.0l编译

  1. 环境准备
    openssl:openssl-1.1.0l
    zlib:zlib-1.2.11 (上述zlib编译结果)
  2. 步骤
    编译前仔细阅读以下INSTALL 和 NOTES.WIN 这两个文件,版本1.0.2对应的文件叫 INSTALL.W32和INSTALL.W64,也不一样,编译过程基本上都在这两个文件里面。
    1)安装perl和汇编工具,按照NOTES.WIN里面推荐的去安装 ActivePerl和nasm,一般安装最新版即可。注:官网下载ActivePerl太慢,可以从360的软件管家里面搜索安装
    2)以管理员身份打开VS2017的命令行程序,本文编译x64版本环境,打开 “x64 Native Tools Command Prompt for VS 2017”。在命令行中切换至openssl-1.1.0l 解压根目录,按照如下命令开始编译
>> perl Configure VC-WIN64A --prefix=@统一文件夹\openssl_1_1_0l_vc15_x64 --with-zlib-include=@统一文件夹\zlib_zip_1_2_11_vc15_x64\include --with-zlib-lib=@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib\release\zlib_zip1211.lib zlib-dynamic
# VC-WIN64A:64位版本编译 
# --prefix:编译结果安装目录
# --with-zlib-include:zlib库包含目录
# --with-zlib-lib:zlib库导入库文件
# zlib-dynamic:zlib以dll形式引入
# zlib:支持zlib压缩
# no-shared:编译静态库 不编译dll
# --debug:编译debug版本
# --release:编译release版本

# 此命令行运行过程中会报 @perl openssl错误图 所示错误,忽略即可
>> nmake
>> nmake test
>> nmake install
>> nmake clean

perl openssl错误图如下所示
perl openssl错误图
3. install
命令行执行完毕后,内容组织如下:
openssl安装目录:@统一文件夹\openssl_1_1_0l_vc15_x64
安装文件夹组织如下:
在这里插入图片描述
lib内容如下:
在这里插入图片描述
bin内容如下:
在这里插入图片描述

openssl-1.0.2t编译

  1. 环境准备
    openssl:openssl-1.0.2t
    zlib:zlib-1.2.11 (上述zlib编译结果)
  2. 步骤
    编译前仔细阅读以下INSTALL.W64文件,编译过程基本上都在这个文件里面。
    1)安装perl和汇编工具,按照INSTALL.W64里面推荐的去安装 ActivePerl和nasm,一般安装最新版即可。注:官网下载ActivePerl太慢,可以从360的软件管家里面搜索安装
    2)以管理员身份打开VS2017的命令行程序,本文编译x64版本环境,打开 “x64 Native Tools Command Prompt for VS 2017”。在命令行中切换至openssl-1.1.0l 解压根目录,按照如下命令开始编译
>> perl Configure VC-WIN64A --prefix=@统一文件夹\openssl_1_0_2t_vc15_x64 --with-zlib-include=@统一文件夹\zlib_zip_1_2_11_vc15_x64\include --with-zlib-lib=@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib\zlib_zip1211.lib zlib-dynamic
# VC-WIN64A:64位版本编译 
# --prefix:编译结果安装目录
# --with-zlib-include:zlib库包含目录
# --with-zlib-lib:zlib库导入库文件
# zlib-dynamic:zlib以dll形式引入

>> ms\do_win64a
>> nmake -f ms\ntdll.mak
# 这两步命令结束编译基本完成
>> cd out32dll
>> ..\ms\test
# 这两步命令测试编译结果
# 编译成功,会提示"passed all tests"
>> nmake -f ms\ntdll.mak install
# 安装到指定目录
  1. install
    命令行执行完毕后,内容组织如下:
    openssl安装目录:@统一文件夹\openssl_1_0_2t_vc15_x64
    安装文件夹组织如下:
    在这里插入图片描述
    lib内容如下:
    在这里插入图片描述
    bin内容如下:
    在这里插入图片描述

libssh2编译

  1. 环境准备
    libssh2:libssh2-1.9.0 https://www.libssh2.org/
    zlib:zlib-1.2.11 (上述zlib编译结果)
    openssl:openssl_1_1_0l (上述openssl编译结果)

  2. 步骤
    1)vs2017项目准备
    libssh2-1.9.0解压根目录\win32\libssh2.dsw项目导入。项目有如图所示的配置
    在这里插入图片描述
    本文环境只编译OpenSSL DLL Debug | x64OpenSSL DLL Release | x64
    配置【Windows SDK 版本】和【平台工具集】。
    【常规】->【目标文件名】内容改为libssh2190;
    【C/C++】->【常规】更新openssl includezlib include
    (这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\include】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\include】)
    【链接器】->【常规】->【附加库目录】更新openssl libzlib lib
    (这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\lib】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib】)
    【链接器】->【输入】更新导入库名字
    libcrypto.lib libssl.lib zlib_zip1211.lib (上述编译的结果)

  3. install
    配置完成后,启动vs2017编译即可。
    libssh2安装目录:@统一文件夹\libssh2_1_9_0_vc15_x64
    安装文件夹组织如下:
    在这里插入图片描述
    include内容如下:
    在这里插入图片描述
    lib内容如下:
    在这里插入图片描述

curl编译

  1. 环境准备
    curl:curl-7.66.0 https://curl.haxx.se/download.html
    zlib:zlib-1.2.11 (上述zlib编译结果)
    openssl:openssl_1_1_0l (上述openssl编译结果)
    libssh2:libssh2-1.9.0 (上述openssl编译结果)

  2. 步骤
    1)vs2017项目准备
    curl-7.66.0解压根目录\projects\Windows\VC15\curl-all.sln项目导入。项目有如图所示的配置
    在这里插入图片描述
    本文环境只编译DLL Debug - DLL OpenSSL - DLL LibSSH2 | x64DLL Release - DLL OpenSSL - DLL LibSSH2 | x64
    配置【Windows SDK 版本】和【平台工具集】。
    【常规】->【目标文件名】内容改为libcurl7660;
    【C/C++】->【常规】更新openssl includezlib include 以及 libssh2 include
    (这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\include】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\include】和【@统一文件夹\libssh2_1_9_0_vc15_x64\include】)
    【C/C++】->【预处理器】添加HAVE_ZLIB_H (zlib的支持)
    【链接器】->【常规】->【附加库目录】更新openssl libzlib lib 以及 libssh2 lib
    (这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\lib】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib】和【@统一文件夹\libssh2_1_9_0_vc15_x64\lib】)
    【链接器】->【输入】更新导入库名字
    libcrypto.lib libssl.lib zlib_zip1211.lib libssh2190.lib (上述编译的结果)

    这里存在问题,上述导入的项目默认情况下,Curl_ssh_init Curl_ssh_cleanup Curl_ssh_version函数没有定义,需要为项目引入定义这些函数的cpp。路径为:@curl解压根目录\lib\vssh\libssh2.c

  3. install
    配置完成后,启动vs2017编译即可。
    curl安装目录:@统一文件夹\curl_7_66_0_vc15_x64
    安装文件夹组织如下:
    在这里插入图片描述
    include内容如下:
    在这里插入图片描述
    lib内容如下:
    在这里插入图片描述

结束

按照上述配置环境和编译过程,编译顺利完成!

上述编译中,使用openssl1.1.0l编译的libssh2,在使用过程中_libssh2_openssl_crypto_exit函数会崩溃。换成openssl1.0.2t后解决。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xys206006/article/details/102593075

智能推荐

计算机病毒怎么取消,电脑病毒恶意软件无法删除。怎么办?_听亭亭的博客-程序员秘密

【问题描述】:文件删除时,无法读取源文件或磁盘【原因分析】:1. 某些文件夹或者目录导致无法删除2. 磁盘错误【简易步骤】:【我的电脑】—【属性】—【工具】—【开始检查】—然后勾选【自动修复文件系统错误】和【扫描并试图恢复坏扇区】—【开始】—【360安全卫士】—【功能大全】—【文件粉碎机】【解决方案:】:方案一:Ctrl+alt+del注销或重启电脑,再次删除;方案二:在安全模式下删除1. 进入【...

拆装机总结_夏诗曼CharmaineXia的博客-程序员秘密

前言今天上午和大家进行了一次有意义的尝试,对机房的电脑实操了一遍拆装机的步骤,了解构造有助于更好的操作和使用计算机。拆装机方案时间:2019年11月10日地点:师范学院数理楼501机房准备工具:螺丝刀、镊子、尖嘴钳、万用表、吹气球、刷子、防静电手套、硅胶等。1.拆卸台式计算机主机流程如下:步骤1:先关闭电脑并切断所有电源,拔去所有与主机的连接线,以确保安全。步骤2:卸下主机箱固定...

vue-element-admin 动态路由(权限管控)_10.10.26的博客-程序员秘密

利用vue-admin-template进行二次开发,只记录了路由权限的设置第一次使用该框架做细分化的权限分配,有些地方有问题还望大佬指导下,后端返回给我的是数组,需要里面对象的"permissionName"的值,路由这边是由前端写上根据后端返回的来的name值进行做判断渲染后端返回我的数据结构1.在api/user.js 修改权限对应后端接口的url,便可正常访问到后端接口数据2.基础路由router/index.js中constantRoutes里面通用部分,asyncRoutes里面权限

查询SSAS日志改为由表生成_ssas access log_yangchen8497的博客-程序员秘密

1、用SSMS工具打开SSAS2、打开属性3、属性Log\QueryLog\CreateQueryLogTable:该属性是否由表生成Log\QueryLog\QueryLogConnectionString:如果上个属性设置为True,则该属性就是配置日志表生成的库Log\QueryLog\QueryLogSamling:用户访问多少次才会记录到表中一条记录Log\Que

word 章节、图片(带章节)、公式自动编号_word图片编号带章节_天边有朵云的博客-程序员秘密

本文内容:章节自动编号 图片自动编号(带上章节号) 公式自动编号(MathType)章节自动编号实现效果:对文本添加标题样式后,自动编号,根据样式情况自动修改编号实现方式:多级列表+各级标题样式(用默认的就可以)步骤:上方菜单栏--开始--列表,选择定义新的多级列表 左上角选择要修改的级别,1级可以认为对应标题1,这里讲下主要改的几个地方,见下图 左上角切换要修改的列表级别, 右上角是选择链接到哪个样式,即对哪个样式自动编号 左中是输入编号格式,.

远程调试HBase,报错:org.apache.hadoop.hbase.MasterNotRunningException; 必须对其进行捕获或声明以便抛出_hbase shell报错:org.apache.hadoop.hbase.masternotrun_RayBreslin的博客-程序员秘密

一、问题描述远程调试HBase,创建配置文件,建立管理员Admin,但是创建时报错:org.apache.hadoop.hbase.MasterNotRunningException在代码运行后报错,我运行之后报错:Warning:(22, 28) java: org.apache.hadoop.hbase.client.HBaseAdmin中的HBaseAdmin(org...

随便推点

谈RAM与ROM的区别与理解_rom和ram csdn_添码星空的博客-程序员秘密

随机存取存储器(Random Access Memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存...

海量数据中寻找中位数_筛选下中位数_鱼思故渊的博客-程序员秘密

题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。

Centos8如何配置网桥_centos 8 桥接_智识训练营的博客-程序员秘密

近日服务器安装CentOS8操作系统,想在这台机器安装KVM虚拟机。需要配置网桥,以方便虚拟机能够局域网中的其他机器处于同一网段相通。Bridge(网桥)是 Linux 上用来做 TCP/IP 二层协议交换的设备,与现实的交换机功能相似。网桥设备实例可以和 Linux 上其他网络设备实例连接。当有数据到达时,网桥会根据报文中的 MAC 信息进行广播、转发、丢弃处理。此前有写一篇文章讲述Ce...

圆圈中最后剩下的数字_caoeryingzi的博客-程序员秘密

<br />程序员面试题精选(14)-圆圈中最后剩下的数字 <br />题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。<br />分析:既然题目有一个数字圆圈,很自然的想法是我们用一个数据结构来模拟这个圆圈。在常用的数据结构中,我们很容易想到用环形列表。我们可以创建一个总共有m个数字的环形列表,然后每次从这个列表

系统调用和库函数调用的区别_系统调用和库函数的区别_leikun153的博客-程序员秘密

一:系统调用和库函数调用的区别:1:系统调用是最底层的应用,是面向硬件的。而库函数的调用是面向开发的,相当于应用程序的API(即预先定义好的函数)接口;2:各个操作系统的系统调用是不同的,因此系统调用一般是没有跨操作系统的可移植性,而库函数的移植性良好(c库在Windows和Linux环境下都可以操作);3:库函数属于过程调用,调用开销小;系统调用需要在用户空间和内核上下文环境切换,开...

推荐文章

热门文章

相关标签