Ubuntu系统下交叉编译openssl

发布于:2025-06-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、参考资料

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

二、准备工作

1. 编译环境

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

2. 设置交叉编译工具链

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

export PATH=/path/to/toolchains/arm-linux-gnueabihf/bin:$PATH

三、交叉编译 openssl

1. 下载源码

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

tar -xvzf openssl-openssl-3.5.0.tar.gz

2. 生成configure配置

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不支持汇编代码。

输出示例:

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

PLATFORM=arm
CROSS_COMPILE=arm-linux-gnueabihf-

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

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

4. 编译安装

make -j8
make install

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

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. 移植到开发板

# 拷贝 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/