如何在 Windows 上构建 Apache - 1.0





5.00/5 (4投票s)
本文介绍如何从源代码在 Windows 上构建 Apache Web 服务器。
引言
从源代码构建大型项目的过程从未一帆风顺。构建步骤会随着版本的不同而变化,我们还需要处理依赖项和为 UNIX
系统设计的代码。因此,我能做的最好的事情就是将所有零散的部分收集到一起,并提供一步一步的说明。
我的目标是写一系列文章,介绍如何设置 Apache 服务器,创建一个带有登录系统的简单网站(因此我们还需要 PHP
和 SQL
),更重要的是,深入研究 C 源代码层面的运作。这种理解将帮助我们找到安全漏洞(或手动创建一个),并研究如何在不知道实际登录名和密码的情况下获取用户信息。
每篇文章都有一个数字索引。第一篇文章是 1.0
,第二篇是 1.1
,以此类推。为了避免沮丧和挫败感,我将按小步骤进行,所以每个步骤不一定对应逻辑上规定的步骤。
分步构建
我们将构建 Apache 2.4.33
。请访问 此链接并下载源代码存档。解压缩并将其重命名为 httpd。现在,我们需要下载依赖项
apr
apr-iconv
apr-util
expat
pcre
(需要安装cmake
才能构建)
前三个可以从 这里 下载。我们将使用 Apr 1.6.3
、Apr-util 1.6.1
和 Apr-iconv 1.2.2
。下载存档,解压缩,并将解压后的文件夹放入 httpd\srclib。将它们分别重命名为 apr
、apr-util
、apr-iconv
。
从 这里 下载 expat
。我们将使用 Expat 2.2.5
。下载存档,解压缩,进入解压后的文件夹,然后将嵌套的 expat
文件夹放入 httpd\srclib。
从 这里 下载 pcre
。我们将使用 Pcre 8.42
(有一个名为 pcre2
的较新版本,但 apache
使用的是旧版本)。下载存档,解压缩,并将解压后的文件夹放入 httpd\srclib。将其重命名为 pcre。
还有一些可选的依赖项,我们将在下一篇文章中添加。现在,我们只使用最少的依赖项来满足构建过程。
Expat 构建
让我们构建 expat
。转到 httpd\srclib\expat 文件夹,在 **Visual Studio** 中打开 expat.sln 解决方案。解决方案 expat
将包含 7 个项目
elements
expat
expat_static
expatw
expatw_static
outline
xmlwf
由于我使用的是 **Visual Studio 2013**,我必须转到 **<项目属性 -> 配置属性 -> 常规 >** 并将平台工具集设置为 **Visual Studio 2013 (v120)**。现在,右键单击 expat
项目并选择 **构建** - 这将构建单个项目 expat
。
Pcre 构建
现在让我们构建 pcre
。这是一个基于 cmake 的项目,所以我们需要从 这里 下载 cmake 二进制文件并安装。转到 httpd\srclib\pcre 文件夹并创建一个名为 build 的子文件夹。启动控制台并 cd
到新创建的 build 文件夹。执行以下命令
cmake --help
在输出中,您将看到可用的生成器。要为 **Visual Studio 2013** 生成解决方案文件,我们需要 **Visual Studio 12 2013** 生成器。执行以下命令
cmake -G "Visual Studio 12 2013" ..
在 Visual Studio 中打开生成的 PCRE.sln 解决方案。解决方案 PCRE 将包含 12 个项目。右键单击 pcre
项目并选择构建 - 这将构建 2 个项目:pcre
和 ZERO_CHECK
。
Apr 构建
现在让我们构建 apr
、apr-iconv
、apr-util
。转到 httpd\srclib\apr-util
文件夹,在 **Visual Studio** 中打开 aprutil.dsw 文件。在旧版本的 **Visual Studio** 中,*.sln* 文件具有 *.dsw* 扩展名,*.vcxproj* 文件具有 *.dsp* 扩展名。**Visual Studio** 将打开以下升级窗口
单击 **确定** 并等待所有 25 个项目升级。准备解决方案需要一些时间,因此它可能看起来已挂起,最后,它将在您的浏览器中打开迁移报告网页。
右键单击 libaprutil
项目并转到项目设置
< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\expat\lib 目录的路径(它包含头文件)
< 配置属性 -> 链接器 -> 常规 -> 其他库目录 >:添加指向 httpd\srclib\expat\win32\bin\Debug 目录的路径(它包含导入库文件)
< 配置属性 -> 链接器 -> 输入 >:将 $(XML_PARSER).lib 修改为 libexpat.lib
右键单击 aprutil
项目并转到项目设置
< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\expat\lib 目录的路径(它包含头文件)
右键单击 libaprutil
项目并选择构建 - 这将构建 7 个项目。
Apache 构建
现在让我们构建 apache
本身。转到 httpd 文件夹并打开 Apache.dsw。您将再次看到升级窗口
单击 **确定**,稍后,您将看到以下通知窗口
勾选 **对所有相似情况执行此操作** 并单击 **否**。转换后,转到 libhttpd
项目设置
< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\pcre\build 目录的路径(它包含头文件)
< 配置属性 -> 链接器 -> 常规 -> 其他库目录 >:添加指向 httpd\srclib\pcre\build\Debug 目录的路径(它包含静态库文件)
< 配置属性 -> 链接器 -> 输入 >:确保我们有 pcred.lib
打开 util_pcre.c 文件
在包含 pcre.h 头文件之前添加 PCRE_STATIC
宏
#include "httpd.h"
#include "apr_strings.h"
#include "apr_tables.h"
#define PCRE_STATIC
#include "pcre.h"
#define APR_WANT_STRFUNC
#include "apr_want.h"
转到 BuildBin
项目设置
< 配置属性 -> VC++ 目录 -> 包含目录 >:添加指向 httpd\srclib\expat\lib 目录的路径(它包含头文件)
转到 httpd\support\win32 文件夹并打开 ApacheMonitor.rc 文件。注释掉以下行
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "ApacheMonitor.manifest"
现在,右键单击 BuildBin
项目并选择 Build
- 这将构建我们的 Web 服务器(124 个项目)。
后记
请注意,我们编译的是调试配置,因为我们将在 **Visual Studio** 中调试正在运行的服务器以查看正在发生的情况。在下一篇文章中,我们将添加 openssl
、zlib
和其他可选库,并修复 config 文件,以便我们的服务器可以运行。