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/
相关推荐
深念Y15 小时前
技术探索记录 在 Android 手机上运行 One API
android·linux·服务器·智能手机·go·交叉编译·服务
今天也想躺ping14 天前
linux系统移植pjsua库实现sip通话功能
linux·sip·交叉编译
想你依然心痛1 个月前
Buildroot快速构建——根文件系统与内核裁剪实战
交叉编译·根文件系统·包管理·启动优化·busybox·buildroot·内核裁剪
花花少年2 个月前
Ubuntu系统下交叉编译gpac
交叉编译·gpac
nnnnichijou2 个月前
Qt 6.9 嵌入式 Linux 交叉编译全栈填坑指南(以树莓派5 AArch64 为例
qt·嵌入式·交叉编译·qml·树莓派5
smaller_maple2 个月前
T113开启openssh
openssl·openssh·t113开启ssh
jrrz08282 个月前
Apollo OSQP库交叉编译
vscode·apollo·交叉编译·mpc·osqp
六点的晨曦4 个月前
OpenCV 4.3 交叉编译 AArch64 完整指南(x64 Ubuntu 20.04)
opencv·交叉编译·ubuntu20.04·aarch64
dling84 个月前
OpenSSL和keytool的区别?如何使用?
openssl·keytool
seaside20035 个月前
ggml交叉编译安卓部署大模型
安卓·交叉编译·ggml