OpenSSL 1.1.1q 交叉编译

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

在嵌入式开发中,编译 OpenSSL 库是常见需求。下面我将详细分享 OpenSSL 1.1.1q 编译ARM32 和 ARM64 版本的交叉编译过程,以及其中关键参数的含义和避坑指南。

一、准备工作

首先,确保你已经下载好了openssl-1.1.1q.tar.gz源码包,同时准备好对应的交叉编译工具链。我使用的工具链如下:

  • ARM32:/opt/toolchain/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
  • ARM64:/opt/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

二、编译 ARM32 版本

1.解压源码包:

tar -zxvf openssl-1.1.1q.tar.gz

2.进入解压后目录 

    cd openssl-1.1.1q
    

    3.配置编译选项 

      ./Configure linux-generic32 no-asm shared no-async --prefix=/home/admin/CSCMain/deps/openssl-1.1.1q/arm CROSS_COMPILE=/opt/toolchain/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- CC=gcc
      

      这里解释下各个参数:

      • no-asm:在交叉编译时,不使用汇编代码来加速编译过程,避免因汇编代码在不同平台兼容性问题导致出错。
      • shared:指定生成动态链接库,如果需要静态链接库,则使用no-shared参数,二者只能选其一。
      • no-async:由于交叉编译工具链通常不提供 GNU C 的 ucontext 库,该参数可以避免因使用该库带来的编译错误。
      • linux-generic32:表明编译适用于标准 32 位 Linux 系统的版本。
      • --prefix:指定编译完成后,使用make install命令时的安装路径。
      • CROSS_COMPILE:指定交叉编译工具链的路径和前缀。

      编译并安装:

      make && make install
      

      三、编译 ARM64 版本

      1. 同样先确保在openssl-1.1.1q目录下。
      2. 配置编译选项:
      ./Configure linux-generic64 no-asm shared no-async --prefix=/home/admin/CSCMain/deps/openssl-1.1.1q/arm64 CROSS_COMPILE=/opt/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- CC=gcc
      

      这里的参数含义和 ARM32 编译时类似,只是linux-generic64代表编译适用于标准 64 位 Linux 系统的版本。

      编译并安装:

      make && make install
      

      四、避坑指南

      在 交叉编译环境中,引用 OpenSSL 库时,链接顺序非常重要。必须按照-lssl -lcrypto的顺序来引用库,如果写成-lcrypto -lssl,编译时就会报错。


      网站公告

      今日签到

      点亮在社区的每一天
      去签到