openssl交叉編譯

2021-02-21 一周思進
一、源碼下載

去官方網站下載最新版本的 openssl,需要注意推薦使用1.1.1版本,1.1.0及1.0.2版本都已不再支持維護,如系統還在使用老版本的openssl,也應儘快升級到1.1.1版本。

直接點擊上圖中的 openssl-1.1.1g.tar.gz 下載源碼壓縮包,通過瀏覽器完成下載,也可以使用 wget 方式下載,如下

二、配置選項

1、下載完成後,進行解壓縮:

tar xzvf openssl-1.1.1g.tar.gz

2、查看 INSTALL 及 NOTES.UNIX 文檔了解相關編譯安裝細節,幾個常用的配置選項說明:

–cross-compile-prefix=PREFIX
指定交叉編譯工具鏈,以連接號結束,如 arm-linux-gnueabihf-

–prefix=DIR
指定 openssl 的安裝目錄,如果只是想生成庫文件,沒有必要執行 make install 命令,也就可以不用指定該選項

–openssldir=DIR
指定 openssl 配置文件的安裝目錄,如果不指定,默認安裝到 –prefix 指定目錄下的 ssl 目錄

no- 不支持指定版本協商

no- 不支持指定算法

三、編譯安裝

首先需要生成 Makefile 文件,可以通過 config 或者 Configure 腳本配置生成。下面先以 config 配置示例,再用 Configure 配置對比兩者的區別。

$./config --cross-compile-prefix=arm-linux-gnueabihf-  --prefix=`pwd`/tmp $make

編譯過程中出現如下錯誤:

arm-linux-gnueabihf-gcc: error: unrecognized command line option '-m64'

解決辦法:
修改makefile,刪除所有-m64的地方

接著編譯出現一堆彙編錯誤,可以通過增加 no-asm 選項解決

如果有出現如下的錯誤信息,因為沒有提供GNU C的ucontext庫,則還需要增加 no-async 選項解決

./libcrypto.so: warning: gethostbyname is obsolescent, use getnameinfo() instead../libcrypto.so: undefined reference to `getcontext'./libcrypto.so: undefined reference to `setcontext'./libcrypto.so: undefined reference to `makecontext'

這樣基本就編譯過了,如果用 Configure 來配置生成 Makefile,方式如下:

./Configure linux-armv4 --cross-compile-prefix=arm-linux-gnueabihf-  --prefix=`pwd`/tmp

config 和 Configure 的區別

Configure 需要指定平臺信息,比如像上面那樣直接指定是 arm 平臺,則 Makefile 中也就不會出現 m64 選項,不需要像 config 那樣再手動去修改 Makefile 腳本。

而 config 則是自己去檢測當前的系統環境,自動識別系統內核信息和編譯器並設定參數等,然後將相關選項再傳遞給 Configure 腳本去完成最終配置。
而交叉編譯的時候基本就會存在問題,所有更推薦使用 Configure 方式來進行配置操作。

但 Configure 需要自己指定目標平臺信息,這個可以通過將 config 腳本放置目標平臺,然後通過 ./config -t 命令來查看其檢測顯示的對應平臺信息,如下:

最後會顯示 ./Configure linux-armv4

補充說明下,配置操作改寫和生成 opensslconf.h 和 opensslv.h 頭文件,opensslv.h 主要記錄當前庫使用的版本信息,而 opensslconf.h 則主要顯示編譯 openssl 庫時的選項配置情況。

近期文章:

二分查找

分治題解

--End--


每周學習總結,相信可以走的更遠。

相關焦點

  • TSN之iproute2交叉編譯
    0 開發環境1 iproute2是什麼2 為什麼要交叉編譯
  • Golang 交叉編譯如何做?
    說明我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識也就是 Golang 令人心動的特性之一跨平臺編譯一、CGO_ENABLED作用:用於標識(聲明) cgo 工具是否可用意義:存在交叉編譯的情況時,cgo 工具是不可用的。
  • 基於 wasm 的 openssl 實踐
    這一篇文章分享的是基於 WebAssembly 的加密工具實踐,我們就以 openssl 的摘要算法 md5 和 sha1 為例,在 Mac 上編譯 openSSL 到 WebAssembly。內部實現調用的是openssl提供的函數,簡單封裝下直接調用即可。我用的 openssl 版本是1.1.1d,地址: https://github.com/openssl/openssl/releases/tag/OpenSSL_1_1_1d  解壓後,進入 openssl-OpenSSL_1_1_1d文件夾。編譯生成 Makefile 文件。emcmake .
  • 嘗試codeblock實現Hi35xx的交叉編譯
    剛開始接觸linux下Hi35xx的交叉編譯,對於makefile的使用感覺實在太頭疼,不懂makefile語法,對Hi35xx的工程也不了解,
  • 一次搞定 Arm Linux 交叉編譯
    為什麼要交叉編譯交叉編譯其實是相對於本地編譯(native build)來說的,我相信大家最開始學習 C/C++ 這些語言的時候,都是在電腦上寫程序
  • 搭建ros交叉編譯環境(從x86到nvidia arm)
    交叉編譯環境搭建流程交叉編譯環境搭建的主要思路是利用catkin提供的rostoolchain腳本設置相應的交叉編譯工具、lib庫地址等,中間遇到問題再針對性解決。:1.ARM ubuntu環境上安裝arm-indigo版本,後面需要將這個arm版本copy到交叉編譯環境上。
  • 【工程師分享】MPSoC交叉編譯例子
    GCC編譯代碼時,預設是在目錄/usr/include查找頭文件,在目錄/usr/lib查找庫文件。如果是交叉編譯,就不能在主機的目錄下查找頭文件和庫文件,因為它們包含的是主機的應用程式的文件。我們需要指定目標單板的頭文件和庫文件。對於這種需求,GCC使用選項sysroot來實現。
  • FFMPEG與X264基於Android NDK的交叉編譯
    最近需要使用ffmpeg在Android平臺做視頻相關的工作,第一步就是交叉編譯ffmpeg和x264兩個相關庫為so動態庫,在此記錄下整個編譯的流程和遇到的一些坑
  • llibcurl 編譯總結
    的工作目錄 D:\Code\sdkdev\LCLibcurl\Trunk\openssl-1.0.2h4)執行命令 perl Configure VC-WIN32, 使用默認安裝路徑,靜態庫編譯方式,頭文件保存在inc32\openssl,庫保存在out32文件夾。
  • macOS系統Golang開發環境搭建及交叉編譯HelloWorld
    說明本文在macOS系統搭建Golang的開發環境,並演示HelloWorld的構建運行;及交叉編譯Windows可執行文件;Golang製作動態庫、靜態庫的HelloWorld;以及調用C語言動態庫的演示。如您使用其他系統請自行查閱對應系統操作命令。 1.
  • 新手入門 | Windows環境中安裝OpenSSL的步驟
    安裝openssl的方法有很多,今天小雲教大家用編譯的方法安裝方法,針對windows xp以上的32位機器~基礎環境需求Step1、下載必要軟體• ActivePerl軟體下載網址:http://www.activestate.com
  • valgrind簡介以及在ARM上交叉編譯運行
    這裡記錄一下在ARM上的交叉編譯及使用過程中的一些問題。1、下載及編譯準備wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2tar xvf valgrind-3.12.0.tar.bz2cd valgrind-3.12.0apt-get install automake.
  • 聯發科Linkit 7688 (一) 上手及在Mac下搭建OpenWrt交叉編譯環境,C語言編譯Hello,World
    開發板上另提供128M 存儲晶片支持WIFI 802.11N, USB2.0, 及其它常用接口( 多個GPIO,UART, JTAG等)3,安裝C語言交叉編譯器,在OpenWrt下開發程序對OpenWrt的系統級開發還是要用C,因此要安裝 C語言交叉編譯器交叉編譯器,是一種特殊的gcc編譯器,就是在PC上編譯出MIPS的Linux程序
  • 如何使用OpenSSL創建自籤名SSL證書
    查看OpenSSL版本獲取最新版本OpenSSL解壓後進行編譯安裝配置,升級到最新版本tar -zxvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k ./config make && make installmv /usr/bin/openssl /usr/bin/openssl.bakln -sf /usr/local/openssl/bin/openssl /usr/bin/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -v
  • openssl 筆記
    openssl.cnf 文件。創建自籤名CA 頒發用戶證書openssl genrsa -des3 -out client.key 1024openssl req -new -key client.key -out client.csropenssl ca -in client.csr -out client.crt -config .
  • OpenSSL 在 Apache 和 Dovecot 下的使用(一)
    編譯自: https://www.linux.com/learn/sysadmin/openssl-apache-and-dovecot 作者
  • OpenSSL 在 Apache 和 Dovecot 下的使用(二)
    編譯自: https://www.linux.com/learn/intro-to-linux/openssl-apache-and-dovecot-part
  • 音視頻開發之旅(33) -交叉編譯android使用的FFmpeg(3.x和4.x)
    目錄配置安裝android交叉編譯工具鏈手寫FFmpeg編譯腳本 進行編譯(針對ffmpeg3.x和ffmpeg4.