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

相关推荐
代码山河5 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行5 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
梯度下降者6 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
“AI国潮设计-小江”7 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
benchmark_cc8 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读9 小时前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放9 小时前
Python基础语法练习题(73)
java·前端·python
锋行天下9 小时前
Langgraph HITL 中断运行,用户输入后输出打字效果
人工智能·python
时早玖沐10 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
触底反弹10 小时前
🚀 FastAPI 五大重难点深度剖析:从 500 报错到彻底搞懂 Depends、Pydantic 与 SQLAlchemy
python·fastapi