1. 程式人生 > >為64位ARMv8架構開發板交叉編譯openssl-1.0.2l

為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條目已經自動生成了對應的編譯器名稱,此時還需要對其它條目進行修改,主要修改條目包括AR

RANLIBNM,將它們的內容由原始的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一行註釋掉。

修改完畢後,在終端輸入make進行編譯。

3.   編譯成功完成後直接sudo make install即可,將安裝到./configure時指定的目錄。如下圖:


4.  至此,已經完成了openssl的交叉編譯工作,對於確認它是否成功make和make install的測試,可以編寫測試程式交叉編譯後在目標環境中執行,這部分內容將在下一篇部落格中簡單介紹。