一、准備工作
1、到openssl官網下載最新版本openssl(如openssl-1.1.1d.tar.gz),上傳到linux編譯機上(如上傳到目錄/home/test下),並使用tar -xvf openssl-1.1.1d.tar.gz解壓:
2、將要用到的交叉編譯工具鏈解壓后,找到交叉編譯器所在路徑:
注意:gcc/ar/ranlib/nm等文件的名字根據編譯鏈的不同,文件名開頭會有所不同,但文件名結尾是不變的,如arm架構比較常見的編譯器是arm-linux-gcc
二、配置
進入openssl源碼目錄,運行如下配置命令
./config shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl
或./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl
其中prefix 是安裝目錄,openssldir 是配置文件目錄,shared 作用是生成動態鏈接庫(即.so庫)
注意:no-asm表示不使用匯編代碼,如果編譯有問題再加,沒有問題就不加
注意: 如果遇到x86_64的編譯鏈,且sysroots下面有兩個目錄,需要添加sysroot參數,用如下命令配置(+參考圖片):
./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl --sysroot="{sysroots/頭文件所在路徑}"
一般來說,頭文件所在路徑與XXX-gcc/g++/ar/nm等(XXX是交叉編譯器名字的前綴)的所在目錄不一樣,在另外一個大目錄下(如下圖所示),還可以找到具體的xxx-gcc文件,使用 /{完整路徑}/xxx-gcc -v命令,會打印出sysroot所在目錄
三、修改Makefile
配置完成后會在openssl源碼目錄下生成一個Makefile文件,打開查看內容,會看到CROSS_COMPILE的值是空的
這時要將CROSS_COMPILE的值修改為XXX-gcc所在絕對路徑+XXX-gcc的文件名前綴,也就是說要先找到交叉編譯工具xxx-gcc/g++/ar/nm等文件所在路徑(其中“XXX-”是交叉編譯工具文件名前綴):
其實修改CROSS_COMPILE的值最終是為了修改arm-linux-xxx-gcc/ar/ranlib/nm等的路徑,在比較老的openssl版本中,沒有CROSS_COMPILE參數,需要修改如下5個變量的值 (注意下圖所用的交叉編譯工具不是跟前面的不一樣,所以路徑也不同):
四、編譯出庫
修改完Makefile后就可以進行編譯了,到openssl源碼目錄下,運行make命令:
openssl源碼目錄下,運行make命令:
make
如果沒有報錯,再運行make install
make install
在配置的openssl安裝目錄下/home/test/openssl找到lib目錄,有如下兩個文件:
libcrypto.so.1.1、libssl.so.1.1和軟鏈接libcrypto.so、libssl.so
五、其他說明
1、交叉編譯工具不是在任何環境上都可使用的,需要系統環境和編譯工具匹配才可以,主要看CPU和指令集
2、如果不需要交叉編譯工具,而是直接使用gcc,那么,配置生成Makefile后不需要修改Makefile(即跳過第三步),直接編譯即可
3、有的編譯工具是32位的,如果在64位的linux機器上使用,可能會報如下錯誤,這時只要將Makefile中的-m64都刪除,再進行編譯即可
作者:Lily_w