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 生成)

相关推荐
码云骑士27 分钟前
120-视频理解-大模型视频分析-抽帧-自动字幕摘要-高光片段
python·音视频
xfan_me33 分钟前
手机在网状态接口-空号查询-空号过滤API
数据库·人工智能·python·智能手机
测试秃头怪36 分钟前
Postman中变量的使用
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
ynchyong37 分钟前
词云(Word Cloud) 使用方法
python·统计·词云
Alkaid20771 小时前
我把文件和脚本放一起了,Python 就是看不见?新手必看的绝对路径 vs 相对路径终极避坑指南
python·ai编程
SamChan901 小时前
Python+OpenCV检测PDF翻译后排版偏移:像素级格式一致性验证
python·opencv·ai·pdf·wpf
会博通·代码搬运工1 小时前
双层PDF技术实现与档案数字化系统的API集成实践
数据库·人工智能·分布式·python·计算机视觉·api集成
健康平安的活着1 小时前
java中批量查询+stream返回map提高查询效率
java·windows·python
无线通信科研笔记1 小时前
IEEE TWC 2026 论文精读与完整复现|H-PASS:机械—电子双重可重构波束成形
论文阅读·人工智能·笔记·python·论文笔记