博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Window下编译OpenSSL
阅读量:7175 次
发布时间:2019-06-29

本文共 1966 字,大约阅读时间需要 6 分钟。

  hot3.png

在Window下编译OpenSSL需要安装perl、vs等软件,本教程将以VS2010+Activeperl为示例。

安装ActivePerl

到<a href="https://www.activestate.com/activeperl/downloads" target="_blank">官网下载</a>对应的运行版本安装即可。

下载并解压OpenSSL源码

到<a href="https://www.openssl.org/source/" target="_blank">官网下载</a>自己需要的版本,并解压到任意目录,比如 c:\openssl-src

设置VS2010编译环境

打开命令行,执行如下命令:

32位:

cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binvcvars32.bat

64位:

cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64vcvars64.bat

其中 C:\Program Files (x86)\Microsoft Visual Studio 10.0 是我VS2010安装目录,读者需要把路径修改为本机实际路径。

进入OpenSSL源码目录

cd c:\openssl-src

配置编译文件

perl Configure debug-VC-WIN32 no-asm --prefix="c:\openssl"

其中:

debug-VC-WIN32 表示windows 32位系统,64位系统请换成 debug-VC-WIN64A

**Relase **版本去掉debug,改为VC-WIN32或者VC-WIN64A

no-asm 表示不用汇编,不设置此属性会导致编译不过

prefix 表示需要安装的目录

生成编译文件

32位:

ms\do_ms.bat

64位:

ms\do_win64a.bat

执行这一步之后,在ms目录下会生成 nt.makntdll.mak 两个编译配置文件

nt.mak 用于生成静态lib库

ntdll.mak 用于生成动态dll库

编译

静态库

nmake -f ms\nt.maknmake -f ms\nt.mak install

动态库

nmake -f ms\ntdll.maknmake -f ms\ntdll.mak install

常见错误

Assembling: tmp32\sha1-586.asmtmp32\sha1-586.asm(1427) : error A2070: invalid instruction operandstmp32\sha1-586.asm(1571) : error A2070: invalid instruction operandsNMAKE : fatal error U1077: 'ml' : return code '0x1'Stop.

出现这个问题一般就是因为在编译配置文件的时候没有加上 no-asm 属性导致的

.\ssl\bad_dtls_test.c : error C2220: 警告被视为错误 - 没有生成“object”文件.\ssl\bad_dtls_test.c : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止 数据丢失NMAKE : fatal error U1077: “"H:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"”: 返回代码“0x2”Stop.

出现这个问题是只需要降低警告级别就可以了,打开 ntdll.mak 文件,大概在第19行附近,将 CFLAG 参数中的 /W3 改成 /W0 就可以了

cryptlib.obj : error LNK2001: 无法解析的外部符号 _OPENSSL_ia32cap_Pcryptlib.obj : error LNK2019: 无法解析的外部符号 _OPENSSL_ia32_cpuid,该符号在函数 _OPENSSL_cpuid_setup 中被引用

出现这个问题是因为之前编译的临时文件没有清理导致的,因为我之前编译的时候没有添加no-asm选项,后面加上时没有清理就直接编译了,那肯定有问题。所以重新清理下再编译即可(清理方式就是重新解压一份原来的压缩包,重新来就是了)

转载于:https://my.oschina.net/jathon/blog/1610759

你可能感兴趣的文章
Asp.Net SignalR Hub类中的操作详解
查看>>
附上解决迅雷9及迅雷极速版任何资源下载任务出错、内容违规问题
查看>>
hadoop3: mkdir: cannot create directory `/usr/local/hadoop/bin/../logs’: Permission denied
查看>>
高阶函数与面向对象继承的比较
查看>>
群雄逐鹿的移动互联网时代【转载】
查看>>
【排序】InsertSort
查看>>
[c++11]多线程编程(五)——unique_lock
查看>>
高程3总结#第15章使用Canvas绘图
查看>>
【go并发编程】
查看>>
JDK源码解析string之二
查看>>
6-C++远征之封装篇[上]-学习笔记
查看>>
html+css布局类型
查看>>
CentOS 虚拟机 扩展LVM硬盘空间
查看>>
Hyperledger Fabric(成员资格)
查看>>
JavaScript的个人理解
查看>>
Java NIO下使用ByteBuffer读取文本时解决UTF-8概率性中文乱码的问题
查看>>
TypeScript 3.0 + React + Redux 最佳实践
查看>>
SpringMVC之源码分析--View(一)
查看>>
前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端工程师的?...
查看>>
Ansible 学习指北
查看>>