Ubuntu系统下交叉编译openssl

一、参考资料

OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园

二、准备工作

1. 编译环境

  • 宿主机:Ubuntu 20.04.6 LTS
  • Host:ARM32位
  • 交叉编译器:arm-linux-gnueabihf-gcc-11.1.0

2. 设置交叉编译工具链

在交叉编译之前,需要设置交叉编译工具链的环境变量。

bash 复制代码
export PATH=/path/to/toolchains/arm-linux-gnueabihf/bin:$PATH

三、交叉编译 openssl

1. 下载源码

GitHub - openssl/openssl: TLS/SSL and crypto library

bash 复制代码
tar -xvzf openssl-openssl-3.5.0.tar.gz

2. 生成configure配置

bash 复制代码
setarch i386 ./config no-asm enable-shared --prefix=/path/to/openssl-openssl-3.5.0/arm32_install --cross-compile-prefix=arm-linux-gnueabihf- -v

解释说明

  • setarch i386:声明生成的是32位CPU,如果是64位CPU则去除该部分。
  • enable-shared:生成动态连接库。
  • no-asm: 在交叉编译过程中不使用汇编代码,以加速编译过程,且arm不支持汇编代码。

输出示例:

bash 复制代码
yoyo@yoyo:~/360Downloads/openssl-openssl-3.5.0$ setarch i386 ./config no-asm enable-shared --prefix=/path/to/openssl-openssl-3.5.0/arm32_install --cross-compile-prefix=arm-linux-gnueabihf- -v
C compiler: gcc
C compiler vendor: gnu
C compiler version: 1101
Configuring OpenSSL version 3.5.0 for target linux-x86
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL.md file first)      ***
***                                                                ***
**********************************************************************

3. 修改Makefile

makefile 复制代码
PLATFORM=arm
CROSS_COMPILE=arm-linux-gnueabihf-

# 如果编译出错,则去掉 `-m32`
CNF_CFLAGS=-pthread # -m32
CNF_CXXFLAGS=-std=c++11 -pthread # -m32

注意:如果 Makefile 中存在 -m32-m64,则删除。

4. 编译安装

bash 复制代码
make -j8
make install

编译安装之后的文件目录:

bash 复制代码
yoyo@yoyo:~/360Downloads/openssl-openssl-3.5.0$ tree -L 2 arm32_install/
arm32_install/
├── bin
│   ├── c_rehash
│   └── openssl
├── include
│   └── openssl
├── lib
│   ├── cmake
│   ├── engines-3
│   ├── libcrypto.a
│   ├── libcrypto.so -> libcrypto.so.3
│   ├── libcrypto.so.3
│   ├── libssl.a
│   ├── libssl.so -> libssl.so.3
│   ├── libssl.so.3
│   ├── ossl-modules
│   └── pkgconfig
├── share
│   ├── doc
│   └── man
└── ssl
    ├── certs
    ├── ct_log_list.cnf
    ├── ct_log_list.cnf.dist
    ├── misc
    ├── openssl.cnf
    ├── openssl.cnf.dist
    └── private

5. 移植到开发板

bash 复制代码
# 拷贝 include
cp -r ./arm32_install/include/ /usr/local/openssl/

# 拷贝lib
cp -r ./arm32_install/lib/ /usr/local/openssl/

# 拷贝bin
cp -arf ./arm32_install/bin/ /usr/local/openssl/
相关推荐
花花少年12 天前
Ubuntu系统下交叉编译gpac
交叉编译·gpac
nnnnichijou15 天前
Qt 6.9 嵌入式 Linux 交叉编译全栈填坑指南(以树莓派5 AArch64 为例
qt·嵌入式·交叉编译·qml·树莓派5
smaller_maple17 天前
T113开启openssh
openssl·openssh·t113开启ssh
jrrz08281 个月前
Apollo OSQP库交叉编译
vscode·apollo·交叉编译·mpc·osqp
六点的晨曦2 个月前
OpenCV 4.3 交叉编译 AArch64 完整指南(x64 Ubuntu 20.04)
opencv·交叉编译·ubuntu20.04·aarch64
dling83 个月前
OpenSSL和keytool的区别?如何使用?
openssl·keytool
seaside20033 个月前
ggml交叉编译安卓部署大模型
安卓·交叉编译·ggml
鹏大师运维5 个月前
统信 UOS OpenSSL 漏洞如何修复?外网 / 内网两种方式一次讲清
linux·运维·openssl·国产操作系统·统信uos·麒麟桌面操作系统·补丁修复
小麻侬5 个月前
CMake gui构建libcurl,MTD/MT,支持openssl
openssl·libcurl·cmake gui