交叉编译apache需在x86主机上用目标架构工具链(如arm-linux-gnueabihf-gcc)编译httpd及依赖库(apr、pcre等),严格匹配目标平台abi与glibc版本,并通过--host、--with-apr等参数配置,最终生成可在嵌入式linux运行的二进制文件。

Apache 源码不能直接在嵌入式设备上编译运行,必须通过交叉编译生成目标平台(如 ARM、PowerPC)可执行的二进制文件。核心在于:**在 x86 主机上,用针对目标架构的工具链编译出能在嵌入式 Linux 上运行的 httpd 及其依赖库**。
先准备好交叉编译环境
这是前提,缺一不可:
- 宿主机(你的开发机)装好 Ubuntu/CentOS 等 Linux 系统
- 安装对应目标平台的交叉编译工具链,例如:
ARM:arm-linux-gnueabihf-gcc(或 arm-none-linux-gnueabi-gcc)
PowerPC:powerpc-linux-gnu-gcc
可通过 apt install 或下载预编译包安装 - 设置环境变量,让 configure 脚本能自动识别:
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export AR=arm-linux-gnueabihf-ar
逐个交叉编译 Apache 的依赖库
Apache 2.x 不再自带 APR,必须单独编译并指定路径。顺序不能错:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
APR:解压后进入目录,运行
./configure --host=arm-linux-gnueabihf --prefix=/opt/cross-apr
make && make install -
APR-Util:同样解压,指定 APR 路径
./configure --host=arm-linux-gnueabihf --with-apr=/opt/cross-apr --prefix=/opt/cross-apr-util -
APR-Iconv(可选,如需字符集转换)
./configure --host=arm-linux-gnueabihf --prefix=/opt/cross-iconv -
PCRE(正则支持,推荐静态链接)
./configure --host=arm-linux-gnueabihf --enable-static --disable-shared --prefix=/opt/cross-pcre
配置并交叉编译 Apache 本身
进入 httpd 源码目录,运行 configure 命令,关键参数要写全:
- --host=arm-linux-gnueabihf:明确告诉它是为 ARM 编译
- --prefix=/usr/local/apache:设定目标设备上的安装路径(不影响编译,只影响 make install 时的目录结构)
- --with-apr=/opt/cross-apr、--with-apr-util=/opt/cross-apr-util、--with-pcre=/opt/cross-pcre:指向你刚编译好的依赖库
- --enable-so:必须开启,否则无法加载模块
- --disable-ipv6、--without-ldap、--without-zlib:嵌入式环境通常精简功能,关掉不用的模块可减小体积
配置成功后执行 make && make install,生成的 bin/httpd、modules/ 下的 so 文件等,就是能在 ARM 板上运行的文件。
部署到嵌入式设备并验证
把 make install 输出的整个目录(如 /usr/local/apache)打包,复制到目标板的对应路径下:
- 确保目标系统有相同版本的 libc(如 glibc 或 musl),否则会报 “not found” 错误
- 检查 httpd 依赖的动态库:arm-linux-gnueabihf-readelf -d bin/httpd | grep NEEDED,确认所有 .so 都存在
- 在目标板上运行:./bin/httpd -t 测试配置语法
再运行 ./bin/httpd -k start 启动服务,用 netstat -tlnp | grep :80 确认监听正常










