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

相关推荐
ctlover4 小时前
hot-100刷题笔记
数据结构·python
三岁就很~酷~4 小时前
ai开发 python+claudecode环境搭建
python·ai编程
赵钰老师4 小时前
基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析
python·arcgis·数据分析·r语言
言乐64 小时前
Python:用AES-GCM算法加密链接内容,并生成可分享的加密链接和解密工具
python·django·virtualenv·pygame·tornado
小静AI工程实验室5 小时前
Claude Code 实用教程:Windows、macOS、Linux 从安装到项目调试与验收
人工智能·python·开发工具·claude code
OKkankan5 小时前
Python常用容器与导入语法详解(二)
数据结构·python
维基框架5 小时前
坊间传闻 OpenAI 将要发布GPT-6 Sol 模型
人工智能·pytorch·python
读研的武5 小时前
Python异步编程
python
宸津-代码粉碎机5 小时前
Java面试核心:JVM三大GC垃圾回收算法原理与生产场景落地分析
java·大数据·人工智能·python·spring
小静AI工程实验室5 小时前
Codex 实用教程:Windows、macOS、Linux 安装配置到首个可验收项目
人工智能·python·开发工具·codex