如何在Windows环境下编译构建Apache httpd的cspnonce模块
编译mod_cspnonce模块问题修复方案
你猜测的需要先预处理Apache源码是完全正确的,Apache源码包里的大量.h.in后缀的模板文件都需要先通过配置步骤生成实际可用的头文件,你遇到的系统头文件缺失问题也和项目配置的Windows SDK版本不匹配有关,按以下步骤操作即可解决:
必须先完成的Apache源码预处理步骤
- 先安装编译Apache依赖的基础工具:Perl(用于运行Apache的配置脚本)、和你使用的Visual Studio版本匹配的Windows SDK
- 打开对应版本的Visual Studio命令提示符(编译64位Apache要选x64原生工具命令提示符,32位选x86),进入Apache源码根目录
- 运行预构建命令生成所有缺失的模板头文件,示例命令如下(可根据你需要的编译架构、安装路径调整):
这一步会自动把所有nmake /f Makefile.win APACHE=Apache24 INSTALLDIR=C:\Apache24 prebuild.h.in文件生成对应的.h头文件,包括你缺失的ap_config_layout.h - 预配置完成后先构建Apache核心库,不要直接编译模块:
这一步会生成nmake /f Makefile.win APACHE=Apache24 INSTALLDIR=C:\Apache24 buildapr.h、os.h等核心依赖头文件和库文件
系统头文件缺失问题修复
你遇到的<string.h>、Windows.h找不到的问题,和Apache源码本身无关,是Visual Studio项目配置错误导致:
- 打开模块的项目属性,依次进入「配置属性」→「常规」,确认「Windows SDK版本」选择了你本机已安装的版本,不要留空或者选择未安装的版本
- 进入「VC++目录」→「包含目录」,确认已经添加了如下路径(根据你的实际文件位置调整):
- Apache源码根目录的
include文件夹 - Apache源码根目录的
os\win32文件夹 src-lib\apr\include文件夹src-lib\apr-util\include文件夹
- Apache源码根目录的
- 进入「VC++目录」→「库目录」,添加Apache核心库编译完成后输出的
lib文件夹路径,以及apr、apr-util编译生成的库文件路径
完成上述所有步骤后,再按模块说明编译即可,编译完成后得到的mod_cspnonce.so文件放到Apache的modules目录就可以加载使用。
内容的提问来源于stack exchange,提问作者Gary Liu
相关产品推荐
相关产品推荐

