Tengine2.4.1 + OpenSSL1.1.1w 全平台编译踩坑手册(CentOS7 x86_64|Linux x64|ARM64|2026实战复盘)

Tengine2.4.1 + OpenSSL1.1.1w 全平台编译踩坑手册(CentOS7 x86_64|Linux x64|ARM64|2026实战复盘)

文档说明

本文档为 2026.06.30 全天真实实战复盘

平台:CentOS 7.9 x86_64

编译目标:

  • ✅ Linux x86_64 静态完整版(一次成功)
  • ✅ Linux ARM64(aarch64) 静态完整版(大量踩坑后最终成功)

组件版本:

  • Tengine:2.4.1(淘宝官方稳定版)
  • OpenSSL:1.1.1w(高安全静态库)

用途:个人技术复盘、避坑手册、后续编译一键对照、面试/存档

第一章 整体编译架构原理(核心认知)

1.1 本机编译 vs 交叉编译

本机编译(x86_64 → x86_64)

宿主架构 = 目标架构,Tengine configure 检测完全正常,无任何BUG。

交叉编译(x86_64 → ARM64)

宿主 x86_64、目标 aarch64

Tengine 2.4.1 存在源码级架构探针硬BUG:

只要架构不一致,直接报错:

|----------------------------------------------------------------------------------------------------|
| checking for C compiler ... found but is not working C compiler aarch64-linux-gnu-gcc is not found |

这是本次最大、最核心、卡死一整天的BUG。

1.2 为什么不能直接 Linux 包改 Windows 包?

本次重要认知升级:

  • Linux 编译产物:ELF 二进制,依赖 glibc、ld-linux
  • Windows 需要:PE .exe 二进制,依赖 msvcrt、kernel32

二者ABI完全不互通,配置文件通用,程序本体绝对不能混用。

第二章 成功流程:X86_64 本机编译(无坑流程)

2.1 编译逻辑(最终稳定可用版)

  1. 独立预编译 OpenSSL 1.1.1w 静态库(no-shared -fPIC)

  2. Tengine configure 不捆绑 zlib、不捆绑 pcre,规避大量递归编译BUG

  3. 精简无用模块,保留生产核心模块

  4. make && make install

  5. 打包绿色目录、启停脚本

2.2 最终稳定 configure 参数(生产可用)

完全无坑、可长期复用:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Plain Text ./configure \ --prefix=INSTALL \\ --with-cc-opt="-O2" \\ --with-openssl=SSL_BUILD \ --with-pcre-jit \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_gzip_static_module \ --without-http_ssi_module \ --without-http_userid_module \ --without-http_autoindex_module \ --without-http_split_clients_module \ --without-http_referer_module \ --without-http_geo_module \ --without-http_map_module \ --without-poll_module \ --without-select_module |

2.3 X64 编译结论

x86_64 本机编译非常稳定,无任何探针BUG,只要 OpenSSL 预编译即可一次成功。

第三章 全天踩坑:ARM64 交叉编译 全部报错复盘

3.1 报错1:--with-ld-opt 非法参数

报错信息

|---------------------------------------------------------------------------------|
| ./configure: error: the invalid value in --with-ld-opt="-static -lpthread -ldl" |

原因

Tengine2.4.1 的 configure 不支持 ld-opt 携带多参数,会直接判定非法。

解决方式

删除所有 --with-ld-opt 参数,改为 sed 后期注入 LDFLAGS

3.2 报错2:openssl ./config 找不到文件

报错信息

|------------------------------|
| /bin/sh: ./config: 没有那个文件或目录 |

原因(超级隐蔽BUG)

Tengine 检测到外部 OpenSSL 后,会强制拼接 /.openssl 隐藏目录

手动编译的 OpenSSL 没有这个目录,导致二次编译失败。

终极解决

|-------------------------------------------------|
| Plain Text ln -s SSL_BUILD SSL_BUILD/.openssl |

软链接欺骗探针,彻底根治。

3.3 报错3:交叉编译器 found but is not working(全天最大坑)

报错信息

|-----------------------------------------------------------------------------------------------------------|
| checking for C compiler ... found but is not working error: C compiler aarch64-linux-gnu-gcc is not found |

真实根因(全网99%人不知道)

Tengine2.4.1 自带架构探针:

如果 宿主机架构 != 目标架构

无论你怎么 export CC、怎么改环境变量,探针直接硬拒绝,判定编译器不可用。

最终唯一解决方案

  1. 先用默认 gcc 空配置跑完 configure(骗过架构检测)

  2. 生成 Makefile 后暴力全覆盖编译工具链

  3. sed 强制替换 CC/AR/RANLIB 为 aarch64 工具链

  4. 手动写入 SSL 头文件与库路径

完全绕开 Tengine 智障探针。

3.4 报错4:make 没有规则可以创建 default/build

原因

configure 阶段报错退出,未生成合法 Makefile

解决

修复前面所有探针报错,保证 configure 成功生成 Makefile。

第四章 最终 ARM64 编译成功标准流程(可复用)

此流程为今日踩坑后沉淀的唯一稳定流程

4.1 前置

  1. 部署 aarch64-linux-gnu 交叉工具链

  2. 单独预编译 ARM64 OpenSSL1.1.1w 静态库

  3. 创建 .openssl 软链接

4.2 Tengine 核心绕坑步骤

  1. 不带任何编译链参数,先 configure 生成基础 Makefile

  2. sed 强制替换全部编译工具为 aarch64

  3. sed 手动写入 CFLAGS、LDFLAGS SSL 路径

  4. make && make install

  5. 重命名 nginx → tengine

  6. 打包绿色包 + 启停脚本

第五章 关键技术总结(复习重点)

5.1 三大核心认知

  • x86编译ARM,绝对不能在configure阶段指定交叉编译器,必死
  • Tengine 2.4.1 不支持 ld-opt 多参数
  • OpenSSL 必须单独预编译 + .openssl 软链接

5.2 跨平台绝对禁忌

Linux ELF 程序 不能 改成 Windows 程序

Windows 版本必须单独 MinGW 交叉编译 PE .exe

5.3 可复用资产

今日打磨出的 x64 + arm64 两套稳定编译参数

未来任何服务器、任何环境均可直接复用,零踩坑。

第六章 遗留待做(后续进阶)

  • CentOS 交叉编译 纯正 Windows x64 .exe 绿色版
  • 制作真正三平台合集:Linux-x64 / ARM64 / Windows-x64
  • 全平台统一配置、统一启停规范

|(注:部分内容可能由 AI 生成)

相关推荐
Omics Pro9 小时前
强生:以机理为中心!虚拟细胞世界模型
数据库·人工智能·python·深度学习·算法·机器学习·自然语言处理
VidDown9 小时前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频
czq_26867194879 小时前
Python打卡第34天
开发语言·python·机器学习
计算机毕业编程指导师9 小时前
大数据毕设选题推荐:基于Hadoop+Spark全球碳排放减排策略分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·碳排放减排
专业程序开发源9 小时前
django便利店外卖后台管理系统19650-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
toooooop89 小时前
宝塔Python项目管理器:环境变量踩坑记录
java·jvm·python
大文说跨境9 小时前
用 Python 自动化检测浏览器环境指纹:WebRTC 泄露、Canvas 哈希与时区一致性校验
python·自动化·webrtc
vx_Biye_Design10 小时前
springboot旅游管理系统18006-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·django·课程设计
半亩码田10 小时前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
外收内放10 小时前
Python基础语法练习题(59-原始版本与优化版本)
开发语言·python