关于 openssl 1.1.1.x版本编译踩坑萌新指南_openssl 1.1.1x-程序员宅基地

技术标签: C++  编译器  git  C语言  

由于项目中经常用到第三方库,但是一直不具备交叉编译的能力,因此选用项目中的链接库 openssl为实验基础,通过编译openssl库熟悉交叉编译的技术

本文将展示编译过程中的种种坑,便于萌新避坑,当然,openssl 1.0.X 版本编译方式本1.1.1.x编译方式不同

 

 

 

Win10  编译openssl 1.1.1系列新版本踩坑指南

环境:操作系统:win10,vs版本2013

 

  1. 在c盘创建openssl_build目录
  2. 下载openssl

官网 :https://www.openssl.org/source/

本文编译的是openssl-1.1.1k版本,下载完成后直接解压到openssl_build文件夹下

在openssl_build目录下创建OpenSSL文件夹,用于安装编译后的openssl

  1. 下载ActivePerl

官网 : https://www.activestate.com/products/perl/downloads/

本文使用的版本:

 

默认安装路径安装ActivePerl后,进入安装目录C:\Perl64\bin

打开cmd 输入命令 perl -v 查看安装版本

 

安装完成后设置环境变量

 

 

 

注意:路径是C:\Perl64\bin,你安装路径的bin目录

  1. 下载nasm

官网 : https://www.nasm.us/

 

 

安装nasm成功后,将安装路径添加到环境变量

 

5、32位编译(一般为了兼容系统编译32位最适合)

打开cmd

cd C:\openssl_build\openssl-1.1.1k 进入openssl目录

perl Configure VC-WIN32 –prefix=C:\openssl_build\OpenSSL  将其安装到OpenSSL目录下

 

如果该步骤出现错误信息

解决办法,修改C:/Perl64/site/lib/ActivePerl/Config.pm,大约在400行左右:

 

修改为

 

# Prevent calling Win32::Console::DESTROY on a STDOUT handle

my $console;

sub _warn {

    # my($msg) = @_;

    # unless (-t STDOUT) {

# print "\n$msg\n";

# return;

    # }

    # require Win32::Console;

    # unless ($console) {

# $console = Win32::Console->new(Win32::Console::STD_OUTPUT_HANDLE());

    # }

    # my($col,undef) = $console->Size;

    # print "\n";

    # my $attr = $console->Attr;

    # $console->Attr($Win32::Console::FG_RED | $Win32::Console::BG_WHITE);

    # for (split(/\n/, "$msg")) {

# $_ .= " " while length() < $col-1;

# print "$_\n";

    # }

    # $console->Attr($attr);

    # print "\n";

}

 

再次执行perl Configure VC-WIN32 –prefix=C:\openssl_build\OpenSSL.生成Makefile

 

由于新版本的openssl ms没有 do_nasm,所以使用makefile 通过nmake编译

 

 

 

直接输入命令nmake会显示错误,因为目前为止还是使用的windows自带的cmd命令行

解决方法:

输入如下命令

cd C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC

vcvarsall.bat(该名字随vs版本而变,可通过输入vcv后按Tab键自动补全)

   

注解: nmake由vs提供,需要将普通windows cmd切换到vs的cmd,在你的vs安装目录下找Microsoft Visual Studio 8类似字样的目录(vs的默认目录名)选择你安装的vs版本目录,随意选择一个,尽量选高版本

执行完后输入切换目录命令

cd C:\openssl_build\openssl-1.1.1k 进入openssl目录

nmake

编译需要很长时间,编译完成后如下图

 

6、测试编译是否成功

输入命令

nmake test

 

发现在test\recipes\70-test_comp.t .....................的时候卡住了

 

问题原因: https://github.com/openssl/openssl/issues/7203

Perl for mingw与VS混合使用

perl正在等待来自stdin的输入(不消耗CPU时间,回显键盘输入)

解决方法:

换个ActivePerl 版本

目前使用

 

7、卸载并重新安装ActivePerl,添加环境变量

从头开始再来一遍(重复全部操作流程,增加记忆)

 

很可惜本次nmake 编译成功但是测试nmake test时出错

上面这个问题找不到解决方案,openssl1.1.1系列编译测试失败,暂时没有好的解决方案,但是编译openssl库流程准确,编译测试涉及本地环境,本文失败了不代表所有编译测试均失败,本文踩了大量的坑,希望对你有所帮助

如果上面测试成功,则通过nmake -f makefile install指令将编译好的库文件安装到OpenSSL目录

 

注:上文中的perl 使用perl Configure VC-WIN32 no-shared no-asm no-tests -D_WIN32_WINNT=0x0501 --prefix=C:\openssl_build\OpenSSL\release_static_lib

指令可成功编译openssl 库

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附录:

nmake指令:

输入指令

指令含义

nmake

编译makefile文件

nmake install

安装编译好的文件到指定目录

nmake clean

清除上一次编译的内容,建议在切换debug/release版本编译时使用

 

 

perl Configure VC-WIN32 no-shared no-asm no-tests -D_WIN32_WINNT=0x0501 --prefix=C:\openssl_build\OpenSSL\release_static_lib

该perl指令含义: 指定生成 win32库(默认release版本), 静态库,不使用汇编,不编译测试文件,支持xp,指定安装目录为C:\openssl_build\OpenSSL\release_static_lib

-D_WIN32_WINNT=0x0501为XP系统下需要,其他系统没测试,可能其他高版本系统不需要此项

VS工程的运行时库(Runtime Library)选择应与编译出的openssl库匹配,尤其动态库,否则可能编译不过。静态库可能例外,本人只验证了一种,可行。

需要使用静态库的时候,如果编译不过,出现LNK2019等错误的时候,你可能还需要添加ws2_32.lib,crypt32.lib库

教程原文: https://blog.csdn.net/qq_22000459/article/details/82968171

 

 

执行Configure是常见参数选项如下:

参数

含义

默认

VC-WIN32

VC-WIN64A

编译win32版本

编译win64版本

 

no-tests

不编译测试文件

 

--debug

--release

编译debug版本

编译release版本

默认release版本

--openssldir=OPENSSLDIR

安装目录

默认是/usr/local/ssl

--prefix=PREFIX

设置 lib include bin 目录的前缀

默认为 OPENSSLDIR 目录

--install_prefix=DESTDIR

设置安装时以此目录作为"根"目录,通常用于打包

默认为空

zlib

zlib-dynamic

no-zlib

使用静态的zlib压缩库    使用动态的zlib压缩库    不使用zlib压缩功能

 

threads

no-threads

是否编译支持多线程的库

默认支持

shared

no-shared

生成动态连接库

生成静态库

 

asm

no-asm

是否在编译过程中使用汇编代码加快编译过程

 

enable-sse2

no-sse2

启用/禁用SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭

 

gmp

no-gmp

启用/禁用GMP库

 

rfc3779

no-rfc3779

启用/禁用实现X509v3证书的IP地址扩展

 

krb5

no-krb5

启用/禁用 Kerberos 5 支持

 

ssl

no-ssl

ssl2

ssl3

no-ssl2

no-ssl3

tls

no-tls

启用/禁用 SSL(包含了SSL2/SSL3) TLS 协议支持。

 

dso

no-dso

启用/禁用调用其它动态链接库的功能。[提示]no-dso仅在no-shared的前提下可用。

禁用选项

 

no-md2

no-md4

no-mdc2

no-ripemd

 

摘要算法

 

no-des

no-rc2

no-rc4

no-rc5

no-idea

no-bf

no-cast

no-camellia

 

对称加密算法

 

no-ec

no-dsa

no-ecdsa

no-dh

no-ecdh

不对称加密算法

 

no-comp

数据压缩算法

 

no-store

对象存储功能

 

 

 

本文使用的软件打包下载地址:

百度网盘  提取码:m6zy

csdn

本文pdf下载:

链接:https://pan.baidu.com/s/1MsZhkXfbfEavn80bnNTsyg 
提取码:ic00 
复制这段内容后打开百度网盘手机App,操作更方便哦

 

 

 

 

 

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

智能推荐

0719学习总结(文件流的输入输出)_请综合输入输出流、文件流和字符串流、特别是文件流中指针相关函数进行文件随机位-程序员宅基地

文章浏览阅读482次。1.输入输出流常用的有:iostream 包含了对输入输出流进行操作所需的基本信息:fstream 用于用户管理的文件的I/O操作。strstream 用于字符串流I/O。stdiostream 用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序。iomanip 在使用格式化I/O时应包含此头文件。2.在iostream头文件中定_请综合输入输出流、文件流和字符串流、特别是文件流中指针相关函数进行文件随机位

鸿蒙osbeta2.0上手上手,鸿蒙OS 2.0上手视频曝光,Mate40系列首批无缘,界面与EMUI一致...-程序员宅基地

文章浏览阅读47次。原标题:鸿蒙OS 2.0上手视频曝光,Mate40系列首批无缘,界面与EMUI一致华为在今天正式召开鸿蒙OS 2.0开发者沟通会,此次沟通会将会讨论鸿蒙OS 2.0的各种相关开发问题。对于普通消费者来说,开发者的事情并不是大家关心的。作为消费者最关心的还是鸿蒙OS 2.0啥时候能够适配自己的手机。 在华为召开开发者大会的同时,华为也在今天正式放出了鸿蒙OS 2.0手机开发者Beta版。目前已经有博...

Jenkins首次安装推荐插件出错 No such plugin: cloudbees-folder 超详细解决方案-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏12次。我的环境:腾讯云 CentOS7 轻量应用服务器docker run -u root -itd -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins-master jenkinsci/blueocean当我首次通过镜像启动一个 Jenkins 容器后,访问服务器 公网ip:8080 访问 Jenkin._no such plugin: cloudbees-folder

JSP入门-基本语法_用于为其他动作提供附加信息的动作是-程序员宅基地

文章浏览阅读392次。JSP入门-基本语法_用于为其他动作提供附加信息的动作是

DNS服务器搭建_server registered via geo dns in ap-east-1-程序员宅基地

文章浏览阅读5.9k次,点赞6次,收藏59次。本篇是关于DNS服务器的搭建配置教程!_server registered via geo dns in ap-east-1

7.2(stm32以太网)_w25qxx_write_nocheck-程序员宅基地

文章浏览阅读3.2k次。《7.2》1.SPI的写入整个扇区W25QXX_Write_NoCheck()--->W25QXX_Write_Page()--->SPI1_ReadWriteByte(); void W25QXX_Write_NoCheck(pBuffer , addr,num) { u8 pageremain; pageremain = addr - addr%256;_w25qxx_write_nocheck

随便推点

ROS命令_ros查找功能包-程序员宅基地

文章浏览阅读2.7k次。文章目录1.功能包、功能包集相关2.工作空间1.功能包、功能包集相关(1) rospack find turtlesim:查找turtlesim包的路径/opt/ros/noetic/share/turtlesim(2) rosls turtlesim:可获取功能包下面的文件列表cmake images msg package.xml srv(3) rosstack find [stack_name]:查找已经在系统中安装过的某个功能包集(4)roscd turtlesim:进入某个文_ros查找功能包

hadoop_connecting to 192.168.128.130:22... could not conn-程序员宅基地

文章浏览阅读412次。连接xshell错误信息如下Connecting to 192.168.128.130:22...Could not connect to '192.168.128.130' (port 22): Connection failed.最有可能的原因是在配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 的时候使用的IPADDR =192.168.128.130 , 这个IP地址不在虚拟机VMware8本身的net 连接的ip范围内,解决步骤如下_connecting to 192.168.128.130:22... could not connect to '192.168.128.130' (

CentOS7 安装 PHP7 完全详细教程_centos7 命令安装php7-程序员宅基地

文章浏览阅读2w次,点赞3次,收藏16次。CentOS7的默认PHP版本是PHP5,但是如果我们要安装PHP7,不需要将现有的PHP5删除,只要将PHP升级到PHP7即可。使用 yum provides php 命令可以获取CentOS7的PHP包安装情况。显示的是在现有的安装源中能够安装的最新版本为:php-5.4.16-46.el7.x86_64在安装PHP7之前,建议先升级更新一下CentOS7的安装包:yum -y upd..._centos7 命令安装php7

偏差平方和说明什么_什么是平方误差和均方误差-程序员宅基地

文章浏览阅读7.1k次。展开全部均方误差是指参数估计636f70793231313335323631343130323136353331333431373161值与参数真值之差平方的期望值,记为MSE。MSE是衡量“平均误差”的一种较为方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。误差平方和又称残差平方和、组内平方和等,根据n个观察值拟合适当的模型后,余下未能拟合部份..._参参数偏差平方和

nginx mysql php源码编译_snowy +nginx-程序员宅基地

文章浏览阅读87次。lamp架构=Linux/unix/windows(操作系统)+apache/nginx……+mysql/pgsql +php/python/golang。开发能力要自己努力。起码需要一些语言基础。不懂代码何以精通?不堪官方源码何以做到熟悉?nginxnginx有官方网站:www.nginx.comtar zxf nginx-1.18.0.tar.gz ##解压。解压之后里面有configure,表示他是开源的。./configure --help ##查看一些参数 _snowy +nginx

Rancher备份&&还原_rancher还原db-程序员宅基地

文章浏览阅读834次。Rancher备份&&还原一、Rancher 备份1、备份# !/bin/bash# /opt/backup/backup-rancher.shDATE=$(date +%Y%m%d%H%M)echo "备份rancher数据"echo "1.拷贝容器内数据"IMAGE_ID=`docker ps |grep rancher:v2.5.8|awk '{print $1}'`docker cp $IMAGE_ID:/var/lib/rancher /opt/ba_rancher还原db

推荐文章

热门文章

相关标签