为 Microsoft Windows 编译 Apache

在开始编译 Apache HTTP Server(httpd)之前,有许多重要的注意事项需要考虑。开始之前,请参见在 Microsoft Windows 上使用 Apache HTTP Server

可以使用基于 cmake 的构建系统在 Windows 上构建 httpd,也可以使用 httpd 开发人员维护的 Visual Studio 项目文件构建 httpd。基于 cmake 的生成系统直接支持 Visual Studio 的更多版本,但当前具有相当大的功能限制。

使用随附的 Visual Studio 项目文件构建 httpd

Requirements

编译 Apache 需要正确安装以下环境:

  • Disk Space

确保您至少有 200 MB 的可用磁盘空间。安装后,Apache 需要大约 80 MB 的磁盘空间,以及用于日志和缓存文件的空间,这些空间会快速增长。实际的磁盘空间要求将根据您选择的配置和任何第三方模块或库而有很大不同,尤其是在还构建了 OpenSSL 的情况下。由于许多文件都是文本并且非常容易压缩,因此 NTFS 文件系统压缩将这些要求减少了一半。

  • Appropriate Patches

httpd 二进制文件是在第三方软件包的多个修补程序的帮助下构建的,可确保发布的代码可构建和调试。这些修补程序可从http://www.apache.org/dist/httpd/binaries/win32/patches_applied/获得和分发,建议将其应用于获得与“官方” ASF 分布式二进制文件相同的结果。

  • Microsoft Visual C 6.0(Visual Studio 97)或更高版本。

可以使用命令行工具或在 Visual Studio IDE 工作台中构建 Apache。命令行构建要求环境反映PATHINCLUDELIB和其他可以使用vcvars32.bat脚本配置的变量。

Note

对于 ml.exe 汇编程序,您可能希望使用旧版本的 Visual Studio 的 Visual Studio 处理器包或较新的 Visual Studio 版本的完整(而非 Express)版本。如果需要,这将允许您使用更有效的汇编代码实现来构建 OpenSSL。

Note

活动的 httpd 贡献者仅积极支持 Microsoft 编译器工具链。尽管该项目定期接受补丁程序以确保 MinGW 和其他替代版本能够正常工作并对其进行改进,但它们并未得到积极维护,并且经常在正常开发过程中被破坏。

  • 2003 年 2 月或之后更新了 Microsoft Windows Platform SDK。

默认情况下,Visual C 7.1 的完整(非快速/精简版)版本(Visual Studio 2002)中包括适当的 Windows Platform SDK,并且这些用户可以忽略这些步骤,除非明确选择更新或不同版本的 Platform SDK。

若要使用 Visual C 6.0 或 7.0(Studio 2000 .NET),必须在开始命令行构建或启动 msdev/devenv GUI 环境之前,使用setenv.bat脚本(由 Platform SDK 安装)准备 Platform SDK 环境。安装适用于 Visual Studio Express 版本(2003 及更高版本)的 Platform SDK 时,应适当调整默认环境。

"c:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32" "c:\Program Files\Platform SDK\setenv.bat"

  • Perl 和 AWK

这里建议的几个步骤在构建准备过程中需要一个 perl 解释器,但否则不是必需的。

要在构建系统中安装 Apache,请使用awk.exeUtil 修改几个文件。选择 awk 是因为它下载量很小(与 Perl 或 WSH/VB 相比),并且完成了安装时修改配置文件的任务。 Brian Kernighan 的http://www.cs.princeton.edu/~bwk/btl.mirror/站点具有一个已编译的本机 Win32 二进制文件http://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe,您必须使用名称awk.exe(而不是awk95.exe)保存该二进制文件。

Note

如果找不到 awk.exe,Makefile.win 的安装目标将不会在已安装的.conf 文件中执行替换。您必须手动修改已安装的.conf 文件,以允许服务器启动。搜索并适当替换所有“ @ token @”标签。

Note

Visual Studio IDE 将仅从 PATH 或菜单选项“工具->选项->(项目->)目录”中指定的可执行路径中找到awk.exe。确保 awk.exe 在您的系统路径中。

Note

还要注意,如果您使用的是 Cygwin 工具(http://www.cygwin.com/),awk Util 将被命名为gawk.exe,并且文件awk.exe实际上是到gawk.exe文件的符号链接。 Windows 命令 Shell 无法识别符号链接,因此,由于该版本,InstallBin 将失败。一种解决方法是从 cygwin 安装中删除awk.exe并将gawk.exe复制到awk.exe。另请注意,gawk 3.0.x 的 cygwin/mingw 端口存在故障,请在尝试使用任何 gawk 端口之前升级至 3.1.x。

Zlib 必须安装在名为zlibsrclib子目录中。这必须就地构建。可以从http://www.zlib.net/获得 Zlib-确认mod_deflate在 1.2.3 版中可以正常使用。

nmake -f win32\Makefile.msc nmake -f win32\Makefile.msc test

  • [可选] OpenSSL 库(用于具有 ssl 支持的mod_sslab.exe)

Note

OpenSSL 库是加密软件。您当前居住的国家/locale 可能对加密软件的 import,拥有,使用和/或再 Export 到另一个国家有限制。在使用任何加密软件之前,请检查您所在国家/locale 关于导入,拥有,使用和再 Export 加密软件的法律,法规和 Policy,以查看是否允许这样做。有关更多信息,请参见http://www.wassenaar.org/

配置和构建 OpenSSL 需要安装 perl。

必须将 OpenSSL 安装到从http://www.openssl.org/source/获得的名为opensslsrclib子目录中,才能编译mod_sslabs.exe项目,该项目是启用了 SSL 支持的 ab.c。要准备将 OpenSSL 链接到 Apache mod_ssl 或 abs.exe,并禁用 OpenSSL 中的专利保护功能,可以使用以下构建命令:

perl Configure no-rc5 no-idea enable-mdc2 enable-zlib VC-WIN32 -Ipath/to/srclib/zlib -Lpath/to/srclib/zlib ms\do_masm.bat nmake -f ms\ntdll.mak

Note

不建议使用 zlib-dynamic,因为这会将 deflate SSL 流的成本转移到必须加载 zlib dll 的第一个请求中。请注意,建议的修补程序使-L 标志能够与 Windows 构建一起使用,更正了 zdll.lib 的名称,并确保生成了.pdb 文件以进行故障排除。如果未安装汇编器,则可以在上面添加 no-asm 并使用 ms\do_ms.bat 而不是 ms\do_masm.bat 脚本。

apr-util 库向 httpd 服务器及其模块公开了 dbm(密钥数据库)和 dbd(面向查询的数据库)Client 端功能,例如身份验证和授权。 sdbm dbm 和 odbc dbd 提供程序是无条件编译的。

dbd 支持包括 Oracle InstantClient 软件包,MySQL,PostgreSQL 和 sqlite。例如,要构建所有这些库,请设置 LIB 以包含库路径,将 INCLUDE 包含 Headers 路径,并设置 PATH 以包含所有四个 SDK 的 dll bin 路径,并设置 DBD_LIST 环境变量以通知构建哪个 Client 端驱动程序 SDK 已正确安装,例如;

set DBD_LIST=sqlite3 pgsql oracle mysql

类似地,可以通过先配置 LIB,INCLUDE 和 PATH 来确保 Client 端库库和 Headers 可用,然后通过 DBM_LIST 扩展 dbm 支持以构建 Berkeley DB 提供程序(db)和/或 gdbm 提供程序。

set DBM_LIST=db gdbm

Note

根据数据库分布的选择,可能有必要更改 srclib\apr-util 目录中相应.dsp/.mak 文件中列出的实际链接目标名称(例如 gdbm.lib 与 libgdb.lib)。\dbd 或...\dbm。

有关获取各种数据库驱动程序 SDK 的更多提示,请参见 README-win32.txt 文件。

从 Unix 来源构建

Apache HTTP Server 项目的策略是仅发布 Unix 源。可供下载的 Windows 源软件包已由志愿者提供,可能并非每个版本都可用。您仍然可以通过 Unix 源 tarball 在 Windows 上构建服务器,仅需执行几个附加步骤。

  • 下载并解压缩最新版本的 Unix 源 tarball。

  • 下载并解压缩最新版本的 APR,AR-Util 和 APR-Iconv 的 Unix 源 tarball,将这些源放置在目录 httpd-2.xx\srclib\apr,httpd-2.xx\srclib\apr-util 和 httpd- 2.xx\srclib\apr-iconv

  • 打开命令提示符并 CD 到 httpd-2.x.x 文件夹

  • 在提示符下运行换行符转换 Util;

perl srclib\apr\build\lineends.pl

现在,您可以使用 IDE 在 Visual Studio 开发环境中构建服务器。除非您按照以下说明导出.mak 文件,否则无法从 Unix 源构建服务器的命令行。

Command-Line Build

Makefile.win是顶级 Apache makefile。要在 Windows 上编译 Apache,只需使用以下命令之一即可构建releasedebug风味:

nmake /f Makefile.win _apacher nmake /f Makefile.win _apached

这两个命令都将编译 Apache。后者将禁用对结果文件的优化,从而使单步执行代码查找错误和查找问题变得更加容易。

您可以使用其他 make(环境)变量 DBD_LIST 和 DBM_LIST 添加 apr-util dbd 和 dbm 提供程序选择,请参见上面有关[Optional]数据库库的 Comments。查看 Makefile.win 中的初始 Comments,以获取调用构建时可以提供的其他选项。

Developer Studio Workspace IDE 构建

还可以使用 VC 的 Visual Studio 开发环境来编译 Apache。为了简化此过程,提供了 Visual Studio 工作区Apache.dsw。该工作空间公开了完整的 Apache 二进制发行版所需要的.dsp项目的完整列表。它包括项目之间的依赖关系,以确保它们以适当的 Sequences 构建。

打开Apache.dsw工作空间,然后选择InstallBin(根据需要选择ReleaseDebug构建)作为“活动项目”。 InstallBin导致所有相关项目被构建,然后调用Makefile.win来移动已编译的可执行文件和 dll。您可以通过更改InstallBin的“设置”,“常规”选项卡,“构建”命令行条目来个性化INSTDIR=选择。 INSTDIR默认为/Apache2目录。如果只希望测试编译(不进行安装),则可以构建BuildBin项目。

.dsp项目文件以 Visual Studio 6.0(98)格式分发。 Visual C 5.0(97)将识别它们。 Visual Studio 2002(.NET)和更高版本的用户必须将Apache.dsw.dsp文件转换为Apache.sln.msproj文件。如果源.dsp文件已更改,请确保再次重新转换.msproj文件!这确实很简单,只需在 VC 7.0 IDE 中再次打开Apache.dsw并重新进行转换即可。

Note

.dsp 文件的.vcproj 转换中存在缺陷。对于包含长引号/ D'efines 且包含空格的 RC 标志,devenv.exe 将误解析/ D 标志。命令:

perl srclib\apr\build\cvtdsp.pl -2005

会将/ D 标志转换为 RC 标志,以使用其他可解析语法;不幸的是,Visual Studio 97 或其导出的.mak 文件不支持此语法。这些/ D 标志用于将 mod_apachemodule.so 文件的详细说明传递到共享的.rc 资源版本标识符版本。

Building with OpenSSL 1.1.0 and up

由于版本 1.1.0 开始的 OpenSSL 的构建结构不同,您将需要将受 cvtdsp.pl 影响的 dsp 文件转换为 APR 1.6 或更高版本。命令:

perl srclib\apr\build\cvtdsp.pl -ossl11

Visual Studio 2002(.NET)和更高版本的用户还应该使用“构建”菜单,“配置 Management 器”对话框来取消选中DebugRelease解决方案模块absmod_deflatemod_ssl组件以及以apr_db*开头的每个组件。通过使用BinBuild目标直接调用nmake或 IDE 来构建这些模块,如果srclib目录openssl和/或zlib存在,则基于DBD_LISTDBM_LIST环境变量的设置有条件地构建这些模块。

导出命令行.mak 文件

导出的.mak文件带来了更大的麻烦,但是 Visual C 5.0 用户需要它们来构建mod_ssl,abs(具有 SSL 支持的ab)和/或mod_deflate。 .mak 文件还支持更广泛的 C 工具链发行版,例如 Visual Studio Express。

您必须首先构建所有项目才能创建所有动态自动生成的目标,以便可以正确解析依赖项。使用BuildAll目标从 Visual Studio 6.0(98)IDE 内构建整个项目,然后对所有 makefile 使用“项目菜单导出”(选中“带有依赖项”.)运行以下命令将绝对路径更正为相对路径,以便他们将在任何地方构建:

perl srclib\apr\build\fixwin32mak.pl

您必须从 httpd 源树的* top *目录中键入此命令。当前目录及以下目录中的每个.mak.dep项目文件都将得到更正,并调整时间戳以反映.dsp

始终检查为 Platform SDK 或其他本地的,计算机特定的文件路径生成的.mak.dep文件。 DevStudio\Common\MSDev98\bin\(VC6)目录包含一个sysincl.dat文件,其中列出了所有 exception。更新此文件(包括正斜杠和反斜杠路径,例如sys/time.hsys\time.h)以忽略此类较新的依赖项。在分布式.mak文件中包含本地安装路径将导致构建完全失败。

如果您提供修改项目文件的补丁,则我们必须以 Visual Studio 6.0 格式提交项目文件。更改应该很简单,并且所有 Visual Studio 环境都可以识别出最少的编译和链接标志。

Installation

编译 Apache 之后,需要将其安装在其服务器根目录中。默认值为同一驱动器的\Apache2目录。

要将所有文件自动构建并安装到所需的文件夹* dir *中,请使用以下nmake命令之一:

nmake /f Makefile.win installr INSTDIR=dir nmake /f Makefile.win installd INSTDIR=dir

INSTDIR的* dir *参数提供安装目录;如果将 Apache 安装到当前驱动器的\Apache22中,则可以省略。

关于从开发树构建 Apache 的警告

Note

请注意,只有.dsp个文件在release个版本之间维护。由于审阅者时间的巨大浪费,无法重新生成.mak文件。因此,除非您自己从项目中导出所有.mak文件,否则您不能依靠上面的NMAKE命令来构建修订的.dsp项目文件。如果您在 Microsoft Developer Studio 环境中进行构建,则没有必要。

使用 cmake 构建 httpd

该构建机制的主要文档位于源代码分发的README.cmake文件中。请参阅该文件以获取详细说明。

使用 cmake 构建 httpd 需要分别构建 APR 和 APR-util。有关说明,请参阅其README.cmake文件。

基于 cmake 的构建的主要限制是从 APR-util 项目继承的,由于它们对 httpd 的影响,下面列出了这些限制:

  • 没有适用于 APR-iconv 子项目的 cmake 构建,并且 APR-util cmake 构建无法使用现有的 APR-iconv 构建。因此,不能使用mod_charset_lite以及可能的某些第三方模块。

  • APR-util 子项目的 cmake 构建不支持所包含的 Visual Studio 项目文件支持的大多数可选 DBM 和 DBD 库。这限制了许多 Binding 模块和第三方模块支持的数据库后端。