编译 Nginx 时应通过 CC 环境变量显式指定 GCC 路径,如 CC=/opt/gcc-12.3.0/bin/gcc ./configure;configure 优先读取 CC 并用于版本检查与构建,后续 make 沿用;可通过 configure 输出、nginx -V 或 Makefile 中 CC = 行验证;CXX、CCFLAGS、CPPFLAGS 等可按需同置命令前;禁用仅改 PATH、硬编码或 make 时覆盖 CC。

源码编译 Nginx 时,默认会调用系统环境变量 PATH 中第一个找到的 gcc。若需强制使用特定路径的 GCC(比如自定义安装的 GCC 12 或交叉编译器),不能靠改 PATH 临时覆盖,而应在 ./configure 阶段显式指定。
通过 CC 环境变量指定 GCC 路径
这是最常用、最可靠的方式。在运行 ./configure 前,把目标 GCC 的绝对路径赋给 CC 变量:
CC=/opt/gcc-12.3.0/bin/gcc ./configure --prefix=/usr/local/nginx ...CC=/usr/local/bin/gcc-11 ./configure --with-http_ssl_module --with-pcre ...
configure 脚本会优先读取 CC,并用它检查编译器版本、头文件和基础链接能力。后续 make 也会沿用该编译器。
验证是否生效
执行 configure 后,可快速确认实际使用的编译器:
- 查看 configure 输出中的 “checking for C compiler” 行,应显示你指定的路径
- 编译完成后运行
/usr/local/nginx/sbin/nginx -V,输出中built by gcc后面的版本和路径应与预期一致 - 或直接检查 Makefile:打开生成的
Makefile,搜索CC =,值应为你设定的路径
其他相关编译器变量(按需设置)
除 C 编译器外,某些模块(如含 C++ 代码的第三方模块)可能还需指定:
-
CXX=/path/to/g++:指定 C++ 编译器(非必需,除非启用 C++ 模块) -
CCFLAGS="-O2 -m64":追加通用 C 编译选项 -
CPPFLAGS="-I/opt/openssl/include":指定额外头文件搜索路径(配合自建 OpenSSL 时常用)
这些变量均可与 CC 一起写在 configure 命令前,用空格分隔,无需 export。
不推荐的做法
以下方式容易失效或引发意外:
- 仅修改
PATH(如export PATH=/my/gcc/bin:$PATH)再运行 configure:不可靠,尤其在自动化脚本或非交互 shell 中可能被忽略 - 编辑 configure 脚本硬编码
CC=...:破坏可维护性,且下次更新源码会丢失 - 试图在 make 阶段用
make CC=...覆盖:configure 已完成检测并生成 Makefile,此时覆盖无法修正依赖检查逻辑











