如何在X86設(shè)備編譯ARM架構(gòu)的openssl和openssh
參考:
? ??https://blog.csdn.net/qq_28117531/article/details/117512559
????https://blog.csdn.net/m0_49857167/article/details/128381931
1.交叉編譯zlib
????zlib-1.2.13.tar.gz? ? ? ? ? ? ? ? ? https://www.zlib.net/
? ? 此處操作步驟有問(wèn)題,不做說(shuō)明
? ? 環(huán)境是沒(méi)有g(shù)cc的Ubuntu的18.04的虛擬機(jī),作者直接 cp?aarch64-linux-gnu-gcc-6.2.1 gcc
? ? tar xvf?zlib-1.2.13.tar.gz
? ? cd?zlib-1.2.13
? ? make -p /usr/local/zlib
? ? ./configure --prefix=/usr/local/zlib/
? ? make && make install -j8
2.交叉編譯openssl
(1)下載源碼包
openssl: openssl-1.1.1u.tar.gz? ? ? ? ? ?https://www.openssl.org/source/
(2)上傳至虛擬機(jī),并進(jìn)行解壓,隨后進(jìn)入目錄
????????tar xvf?openssl-1.1.1u.tar.gz?
????????cd openssl-1.1.1u
(3)創(chuàng)建編譯輸出結(jié)果的目錄
? ? ? ? mkdir -p /usr/local/openssl
(4)執(zhí)行配置文件,命令如下:
????????./config no-asm shared no-async --prefix=/usr/local/openssl --cross-comple-prefix=aarch64-linux-gnu-
????????參數(shù)說(shuō)明:
? ? ? ? ? ? ? ? no-asm:在交叉編譯過(guò)程中,不使用匯編代碼代碼加速編譯過(guò)程,原因是他的匯編代碼是對(duì)arm格式不支持的
? ? ? ? ? ? ? ? share:生成動(dòng)態(tài)連接庫(kù)
? ? ? ? ? ? ? ? no-async:交叉編譯工具鏈沒(méi)有提供GNC C的ucontext庫(kù)
? ? ? ? ? ? ? ? --prefix=:安裝路徑,編譯完成install后,將有bin,lib,inlude等文件夾
? ? ? ? ? ? ? ? -cross-compile-prefix=:交叉編譯工具
? ? 修改Makefile文件
? ? 注釋?zhuān)?/p>
? ? ? ? ? ? # CNF_CFLAGS=pthread -m64
? ? ? ? ? ? # CNF_CXXFLAGS=-std=c++11 -pthread -m64
? ? make && mak install -j8
3.交叉編譯openssh? ?
(1)下載源碼包
openssh-9.2p1.tar.gz? ? ? ? ? ?http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
(2)上傳至虛擬機(jī),并進(jìn)行解壓,隨后進(jìn)入目錄
????????tar xvf?openssh-9.2p1.tar.gz?
????????cd?openssh-9.2p1
(3)交叉編譯
? ? ? ? ./configure --host=arm-linux-gnueabihf --with-lib --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl --disable-etc-default-login CC=aarch64-linux-gnu-gcc-6.2.1 AR=aarch64-linux-gnu-gcc-ar
? ? ? ? 參數(shù)說(shuō)明:
? ? ? ? --host:表示主機(jī)架構(gòu),這里選擇arm
? ? ? ? --with-zlib:表示指定先前編譯的zlib庫(kù)的存放路徑
? ??????--with-ssl-dir:表示上面交叉編譯的openssl庫(kù)的存放路徑
? ? ? ? CC:指定交叉編譯器
? ? ? ? AR:指定庫(kù)管理器
? ? ? ? ? ? make -j8
? ? ? ? ? ? 編譯完成,當(dāng)前路徑下的ssh,即是需要的arm的ssh