为64位ARMv8架构开发板交叉编译openssl-1.0.2l

因科研实验需要,完成了针对64为ARM架构目标开发板的交叉编译,之前网上查询了一些方法,有些并不可行,且操作性与可读性都较差,这里给出自己亲手编译成功的过程。

本次编译的目标环境和编译环境如下:

目标环境:CPU为64位ARMv8的华为620开发板;

编译环境:Ubuntu14.04 LTS + aarch64-linux-gnu-gcc 4.8编译器。

编译器可以通过sudo apt-get install gcc-aarch64-linux-gnu下载安装最新版本,当前最新的openssl-1.0.2l可以从官网下载https://www.openssl.org/source/并解压,尽量下载最新的,杜绝之前的心脏滴血漏洞和其他小bug。

正式交叉编译与安装步骤如下:

1. 运行configure文件,在Linux终端openssl目录下输入如下命令运行configure文件:CC=aarch64-linux-gnu-gcc./config no-asm shared --prefix=/home/xiaot/armlib/openssl

其中参数./configno-asm shared--prefix=的含义为:

no-asm:在交叉编译过程中不使用汇编代码代码加速编译过程;

shared:生成动态链接库;

--prefix:指定生成lib、include、bin三个核心目录的路径,不修改此项则默认为OPENSSLDIR目录。

2.  ./configure执行完毕后,可以生成对应的makefile文件,其具体名称为openssl_Makefile,打开该文件,可以看到CC条目已经自动生成了对应的编译器名称,此时还需要对其它条目进行修改,主要修改条目包括ARRANLIBNM,将它们的内容由原始的gcc相关项修改为aarch64相关项,修改后核心内容如下:

CC= aarch64-linux-gnu-gcc
CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -O3 -Wall
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS
PEX_LIBS= 
EX_LIBS= -ldl
EXE_EXT= 
ARFLAGS= 
AR= aarch64-linux-gnu-ar $(ARFLAGS) r
RANLIB= aarch64-linux-gnu-ranlib
RC= windres
NM= aarch64-linux-gnu-nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG=makedepend
LIBDIR=lib

此外,还要把该文件中的所有-m64标记删除,正常情况下应该有两处,第一处在CC的编译选项处下面,第二处如下图,可以把SHARED_LDFLAGS=-m64一行注释掉。

为64位ARMv8架构开发板交叉编译openssl-1.0.2l_第1张图片

修改完毕后,在终端输入make进行编译。

3.   编译成功完成后直接sudo make install即可,将安装到./configure时指定的目录。如下图:


为64位ARMv8架构开发板交叉编译openssl-1.0.2l_第2张图片为64位ARMv8架构开发板交叉编译openssl-1.0.2l_第3张图片

4.  至此,已经完成了openssl的交叉编译工作,对于确认它是否成功make和make install的测试,可以编写测试程序交叉编译后在目标环境中运行,这部分内容将在下一篇博客中简单介绍。


你可能感兴趣的:(其他技术方向)