Windows 下OpenSSL安装过程及错误解决办法

Windows下使用OpenSSL有两种方式:
一.直接下载别人编译好的安装包:http://slproweb.com/products/Win32OpenSSL.html
二.自己编译安装:
1.下载并安装perl
http://www.activestate.com/activeperl/downloads/
2.安装与配置:
直接运行安装文件(例如:ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi)即可完成安装;安装过程将自动完成环境变量的配置(安装完成之后,可以在系统环境变量里看到perl的bin目录(例如: C:\Program Files\perl\site\bin;)已经被加入进来),无需再手工配置;
3.测试安装是否成功:
进入perl安装目录的eg文件夹,执行“perl example.pl”若显示“Hello from ActivePerl!”,则说明Perl安装成功。如下图所示:
这里写图片描述
perl安装成功之后就可以开始使用Perl的相关命令来进行OpenSSL的安装了。
4.openssl可以自己下载源码编译也可以直接下载安装包安装完之后即可使用。
5.使用源码编译openssl
1) 下载openssl源码的路径:
http://www.openssl.org/source/
2)配置VS2012的环境变量(因为后面编译openssl时,将会用到vs2012自带的nmake工具)。
执行VS2012的bin目录下(例如:E:\Visuol Studio 2012\VC\bin)的vcvars32.bat文件即可完成配置,我的因为配置完了什么都不显示了。就不截图了。
3)配置openssl
以下是我在网上找到的配置OpenSSL的方法,这里我上链接吧:https://blog.csdn.net/houjixin/article/details/25806151

这里写图片描述
这里写图片描述
这里写图片描述

注意:

我按照他的方法进行操作,出现两种错误,
1.

tmp32dll\sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32dll\sha1-586.asm(1576) : error A2070:invalid instruction operands
NMAKE : fatal error U1077: “"E:\Visuol Studio 2012\VC\BIN\cl.EXE"”: 返回代码“0x1”

2.

tmp32dll\sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32dll\sha1-586.asm(1576) : error A2070:invalid instruction operandsN
MAKE : fatal error U1077: “"E:\Visuol Studio 2012\VC\BIN\cl.EXE"”: 返回代码“0x2”

废了九牛二虎之力才找到了解决的方法,
针对第一种错误的解决方法是:禁用汇编

perl Configure VC-WIN32 no-asm

第二种错误的解决方法为:这个在openssl官方网站上找到了,方法是禁用IPV6
可以参考:http://rt.openssl.org/Ticket/Display.html?id=2097&user=guest&pass=guest

perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0

最终我改成了:

perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0 no-asm

到这里很开心啊,刷刷的一直在编译,说明成功啦,duangduangduang,结果出现了:

  link /nologo /subsystem:console /opt:ref /debug /dll /out:out32dll\libeay32.dll /def:ms/LIBEAY32.def @C:\Users\ADMINI~1\AppData\Local\Temp\nmE10C.tmp
   正在创建库 out32dll\libeay32.lib 和对象 out32dll\libeay32.exp
cryptlib.obj : error LNK2019: 无法解析的外部符号 _OPENSSL_ia32_cpuid,该符号在函数 _OPENSSL_cpuid_setup 中被引用
cryptlib.obj : error LNK2001: 无法解析的外部符号 _OPENSSL_ia32cap_P
md5_dgst.obj : error LNK2019: 无法解析的外部符号 _md5_block_asm_data_order,该符号在函数 _MD5_Final 中被引用
sha1dgst.obj : error LNK2019: 无法解析的外部符号 _sha1_block_data_order,该符号在函数 _SHA1_Final 中被引用
sha256.obj : error LNK2019: 无法解析的外部符号 _sha256_block_data_order,该符号在函数 _SHA256_Final 中被引用
sha512.obj : error LNK2019: 无法解析的外部符号 _sha512_block_data_order,该符号在函数 _SHA512_Final 中被引用
out32dll\libeay32.dll : fatal error LNK1120: 6 个无法解析的外部命令
NMAKE : fatal error U1077: “"E:\Visuol Studio 2012\VC\BIN\link.EXE"”: 返回代码“0x460


这就很蛋疼啊,但是我还是没有放弃,这个问题我觉得不是很难解决。后来我在百度上找到了这样一篇文章:https://blog.csdn.net/mfcing/article/details/43059105,其实跟出现的这个错误并没有什么相关联的,但是我看到了一条这样的代码:

测试动态库:
    nmake -f ms\ntdll.mak test
    测试静态库:
    nmake -f ms\nt.mak test

    安装动态库:
    nmake -f ms\ntdll.mak install
    安装静态库:
    nmake -f ms\nt.mak install

    清除上次动态库的编译,以便重新编译:
    nmake -f ms\ntdll.mak clean
    清除上次静态库的编译,以便重新编译:
    nmake -f ms\nt.mak clean

我就在想是不是跟我之前编译过了一次有关系?于是我敲了:

nmake -f ms\ntdll.mak clean

再从头来了一遍

1.perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0 no-asm
2.ms\do_ms.bat
3.nmake -f ms\ntdll.mak

刷刷刷刷刷刷。。。。。。。。。。等了一分多钟,,,终于可以了!
这里写图片描述

我又执行了一下nmake -f ms\ntdll.mak test 测试了一下。

这里写图片描述

说明:本次测试在WIN10 64 VS2012 openssl-1.0.2o 版本测试成功,其他情况并不确保成功。如有问题,请联系博主。小弟尽量帮解决。

### 二维前缀和算法在瓦片图案生成或处理中的应用 #### 定义与基本原理 二维前缀和是一种用于快速求解矩形区域内元素总和的技术。对于给定的一个矩阵 `A`,可以预先计算一个新的矩阵 `prefixSum`,其中每个元素 `(i,j)` 表示从原点 `(0,0)` 到当前坐标的子矩阵内所有数值之和。 通过这种方式,在后续查询任意指定区域内的元素累积值时只需常数时间复杂度 O(1),因为只需要访问四个预处理过的节点即可完成加减运算得出结果[^1]。 #### 应用场景分析 当涉及到像地图服务这样的应用场景时——特别是采用分层切片机制的地图系统(如微软 Bing 地图),这种技术能够显著提升性能效率: - **加速渲染过程**:利用二维前缀和可以在瞬间获取特定范围内的数据汇总信息,从而加快图像合成速度; - **简化碰撞检测逻辑**:游戏开发等领域经常需要用到对象间相互作用判断,借助此方法可迅速定位目标区间并作出响应; - **优化路径规划算法**:无论是最短路还是其他形式的空间搜索问题,都能受益于高效的数据检索能力所带来的优势[^2]。 #### 实现案例展示 下面给出一段 Python 代码片段作为例子说明如何基于上述理论框架构建实际解决方案: ```python def build_prefix_sum(matrix): rows = len(matrix) cols = len(matrix[0]) if matrix else 0 prefix_sum = [[0]*(cols+1) for _ in range(rows+1)] for i in range(1,rows+1): for j in range(1,cols+1): prefix_sum[i][j]=matrix[i-1][j-1]+\ prefix_sum[i-1][j]+ \ prefix_sum[i][j-1]- \ prefix_sum[i-1][j-1] return prefix_sum def query_submatrix_sum(prefix_sum,x1,y1,x2,y2): """Query sum of elements within sub-matrix defined by top-left (x1,y1), bottom-right(x2,y2).""" return prefix_sum[x2+1][y2+1]-prefix_sum[x1][y2+1]-prefix_sum[x2+1][y1]+prefix_sum[x1][y1] # Example usage: input_matrix=[[3,0,1,4],[2,8,7,5],[4,6,9,1]] ps=build_prefix_sum(input_matrix) print(query_submatrix_sum(ps,1,1,2,2)) # Output should be 30 which is the sum inside this area. ```
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离水的鱼儿

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值