openssl的Linux编译与交叉编译

目录

一、下载源码

二、编译安装

普通编译安装

交叉编译安装

参数解释

注意事项

三、安装成功示例

四、参考资料 


一、下载源码

官网地址: /index.html
旧的版本下载地址: /source/old/index.html
git上下载地址: https://github.com/openssl/openssl/releases

版本解释:

https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_VERSION_NUMBER.html
从文章中 #define OPENSSL_VERSION_NUMBER 0xnnnnnnnnnL  可以看得出版本号共9位数, 
如 0x101010ef 省略了前面的一个0,实际为 0x0101010ef  版本是 OpenSSL 1.1.1n

解析:
0x0101010ef 前面6位的 010101 为 1.1.1
7到8位为 0e 对应字母 n
n的由来如下:
01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

第9位代表状态 dev beta release等 

二、编译安装

注意:本人所述都是基于:CentOS Linux release 7.4 的操作,其它发行版本不保证一样!

解压源码后,进入解压后的路径,如:cd openssl-1.0.2o,按如下步骤执行命令:

普通编译安装

  1. ./config --prefix=/home/yourInstallPath/x86 -fPIC no-shared no-asm
  2. make -j10 && make install

交叉编译安装

  1. ./config --prefix=/home/yourInstallPath/x3399 -fPIC no-shared no-asm --cross-compile-prefix=aarch64-linux-gnu-
  2. 打开./config 生成的Makefile,将-m64选项全部删除掉,一共有两处,如果在x86机器进行交叉编译,不删除会报错。
  3. make -j10 && make install

参数解释

  •  --prefix 表示自定义安装路径,如果想安装在默认路径下,可以不使用这个参数;
  • -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),  则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的;
  • no-shared 表示不生成动态库,只生成静态库,如果想生成动态库使用shared参数(默认应该也是动态库)。no-asm  表示:Do not use assembler code。
  • --cross-compile-prefix 表示指定交叉编译器,需要提前安装配置好自己需要的交叉编译器。

注意事项

  • -cross-compile-prefix指定的编译器不是全称,比如我想使用的是aarch64-linux-gnu-gcc,但是执行交叉编译命令时,填写的是aarch64-linux-gnu-,后面的gcc不用写,会自动识别。
  • 上面命令中的yourInstallPath替换成自己想要安装的路径。
  • 如果普通编译和交叉编译先后进行,最好前一种编译后删除源码,再次解压后再进行后一种编译,或者分别解压两次到不同的路径后分别执行不同的编译,因为我遇到过在同一个路径下先编译x86的,完成后make clean,再编译arm的aarch64,会报错一种:error adding symbols: File in wrong format的错误。

三、安装成功示例

从图中可以看出,指定安装路径下的include下生成了头文件,lib下生成了 libcrypto.a 和 libssl.a 两个静态库文件,这样就可以把库文件和头文件应用到自己的工程中去了!

四、参考资料 

Linux系统编译Openssl步骤_openssl编译要多久_李柏林的博客-CSDN博客

ubuntu - cc1: error: unrecognized command line option "-m64" - SegmentFault 思否

https://www.cnblogs.com/ynxf/p/6375091.html

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在 Linux 上使用 OpenSSL 进行交叉编译的一般步骤: 1. 获取交叉编译工具链 您需要获取适用于您的目标体系结构的交叉编译工具链。这可以通过您的操作系统或第三方提供商进行获取。 2. 获取 OpenSSL 源代码 从 OpenSSL 官方网站下载最新版本的源代码,并将其解压缩到您的计算机上。 3. 配置 OpenSSL 在终端中导航到解压缩的 OpenSSL 目录,并运行以下命令: ``` ./Configure <options> --cross-compile-prefix=<prefix> ``` 其中,`<options>` 是您需要为 OpenSSL 配置指定的选项,以便在目标体系结构上进行编译。`<prefix>` 是您的交叉编译工具链的前缀。 例如,如果您的交叉编译工具链的前缀为 `arm-linux-gnueabi-`,您可以运行以下命令: ``` ./Configure linux-armv4 --cross-compile-prefix=arm-linux-gnueabi- ``` 4. 编译 OpenSSL 在终端中运行以下命令编译 OpenSSL: ``` make CC=<compiler> AR=<archiver> RANLIB=<ranlib> ``` 其中,`<compiler>` 是您的交叉编译工具链中的编译器,`<archiver>` 是您的交叉编译工具链中的静态库归档器,`<ranlib>` 是您的交叉编译工具链中的 ranlib 工具。 例如,如果您的交叉编译工具链的前缀为 `arm-linux-gnueabi-`,您可以运行以下命令: ``` make CC=arm-linux-gnueabi-gcc AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib ``` 5. 安装 OpenSSL 在终端中运行以下命令安装 OpenSSL: ``` make install DESTDIR=<install_dir> ``` 其中,`<install_dir>` 是您要安装 OpenSSL 的目录。 例如,如果您要将 OpenSSL 安装到 `/usr/local/openssl`,您可以运行以下命令: ``` make install DESTDIR=/usr/local/openssl ``` 完成这些步骤后,您应该能够在您的目标体系结构上运行 OpenSSL

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值