设为首页 收藏本站
查看: 548|回复: 0

[经验分享] 编译 Apache for Microsoft Windows

[复制链接]

尚未签到

发表于 2018-6-12 12:54:31 | 显示全部楼层 |阅读模式
  系统要求

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

磁盘空间

确保至少有50 MB空闲磁盘空间可用。安装以后Apache要求大约 10 MB磁盘空间,再加上会快速增长的日志和缓存文件需要的空间。 实际需要的空间大小会相当大程度上取决于你选择的配置以及使用的第三方模块和库。

系统要求

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

磁盘空间

确保至少有50 MB空闲磁盘空间可用。安装以后Apache要求大约 10 MB磁盘空间,再加上会快速增长的日志和缓存文件需要的空间。 实际需要的空间大小会相当大程度上取决于你选择的配置以及使用的第三方模块和库。

Microsoft Visual C++ 5.0 或更高版本。

可以使用命令行工具,也可以在Visual Studio集成开发工作环境内编译Apache。使用命令行工具要求环境变量中包含 路径, 头文件, 库和其他一些变量,这些环境变量可以用vcvars32批处理文件来设置;

"c:Program FilesDevStudioVCBinvcvars32.bat"

The Windows Platform SDK.

Visual C++ 5.0 编译需要一套新版的Microsoft Windows Platform SDK来允许Apache的某些特性。 对于命令行编译,用setenv批处理文件来设置环境变量:

"c:Program FilesPlatform SDKsetenv.bat"

随Visual C++ 6.0 及以后版本发布的Platform SDK文件足以满足要求,所以新版本的用户可以略过这条要求。

注意,需要新版的Windows Platform SDK来使得Apache支持的全部mod_isapi特性可用。没有新版SDK的话,在MSVC++ 5.0 下编译Apache会出现某些mod_isapi特性将被禁止的警告。 在http://msdn.microsoft.com/downloads/sdks/platform/platform.asp可以找到新版的Microsoft Winodws Platform SDK。
awk工具(awk, gawk或类似软件).

为了在编译系统内安装Apache,用awk.exe工具修改了几个文件。选择awk是因为它很小易于下载(与Perl或者WSH/VB相比),而且能够完成生成文件的任务。 Brian Kernighan的http://cm.bell-labs.com/cm/cs/who/bwk/ 站点有一个编译好的本地Win32代码版本,这个文件 http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe你必须将它名字保存为awk.exe而不是awk95.exe。

注意Developer Studio集成开发环境只能在Tools - Options菜单中的Directories页上列出的可执行文件搜索路径列表中查找 awk.exe(对于Developer Studio 7.0 是在the Projects - VC++ Directories 面板)。 把awk.exe的路径加入到列表中,并按要求加入到系统PATH环境变量里。
如果你用的是Cygwin (http://www.cygwin.com/)需要注意,awk工具的文件名是gawk.exe而文件awk.exe实际上是gawk.exe的一个符号连接。 而Windows命令行解释程序不认识符号连接,因此编译二进制安装文件会失败。可行的变通办法是从cygwin安装目录删除文件awk.exe并把gawk.exe 改名为 awk.exe。
[可选] OpenSSL库 (因为 mod_ssl 和 ab.exe 用到ssl支持)

警告:在整个世界范围使用和发布强壮的密码体系与专利知识产权都有相当大的限制和严格的禁令。 OpenSSL包括了在美国及其他国家和地区受到出口条例、国内法律以及受专利保护的知识产权所限制的强壮密码体系。对于OpenSSL项目提供的代码,不管是Apache软件基金会还是OpenSSL项目都不能提供关于拥有、使用和发布该代码的法律建议。向你自己的法律顾问咨询,你需要为你自己的行为负责。

为了编译 mod_ssl或abs项目(ab.exe用到SSL支持),OpenSSL必须安装到srclib目录下名为openssl的子目录中,openSSL可以从http://www.openssl.org/source/获得。要是准备既编译release版本又编译debug版本,而且要禁止 0.9.6 版中受专利保护的特性,你应该使用下列编译命令:

perl utilmkfiles.pl >MINFO
perl utilmk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 >makefile
perl utilmk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 >makefile.dbg
perl utilmkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea >mslibeay32.def
perl utilmkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea >msssleay32.def
nmake
nmake -f makefile.dbg

[可选] zlib 源码 (用于 mod_deflate)

Zlib必须安装到srclib目录下的zlib子目录,但是你不需要去编译那些源码。编译系统会直接把压缩源码编译到mod_deflate模块中去。 Zlib可以从http://www.gzip.org/zlib/获得 -- mod_deflate已经经过验证可以使用版本 1.1.4 正确编译。


命令行编译

首先,将Apache源码解包到合适的目录。打开一个命令提示符窗口并用cd切换到那个目录。

主要的Apache make文件命令都包含在文件Makefile.win中。要在Windows NT上编译Apache,只需要简单地使用下列命令之一就可以编译release版本或者debug版本,分别是:

nmake /f Makefile.win _apacher

nmake /f Makefile.win _apached

两条命令都可以编译Apache。后者会在编译结果文件中包含调试信息,使发现bugs和跟踪问题更容易。


Developer Studio集成开发环境的工作区编译

Apache也能够用VC++的Visual Studio集成开发环境编译。为了简化过程,提供了一个Visual Studio工作区文件,Apache.dsw。 它阐述了完整的Apache二进制发行版需要的全部.dsp项目列表。 它包含了项目之间的依存关系来保证编译按合适的顺序进行。

打开 Apache.dsw 工作区文件,选择 InstallBin (根据需要选择编译Release 或者 Debug 版本) 为活动项目。InstallBin会引发编译相关的项目并调用 Makefile.win 移动编译后的可执行文件和动态链接库。你可以改变InstallBin项目的设置来定制 INSTDIR=选项,修改设置中General页里面的Build Command line条目。INSTDIR的缺省值是 /Apache2目录。如果你只是想要测试编译(不安装),就用 BuildBin项目代替。

.dsp项目文件使用Visual C++ 6.0格式发行。Visual C++ 5.0 (97)也能识别这种格式。而Visual C++ 7.0 (.net)必须把Apache.dsw和.dsp 文件转换成Apache.sln和.msproj文件, 如果有任何一个.dsp源文件改变了,必须重新转换相应的.msproj文件! 这很容易,只需要在VC++ 7.0 集成开发环境中重新打开 Apache.dsw文件。

Visual C++ 7.0 (.net)的用户还应该使用Build 菜单下的Configuration Manager对话框来不选中模块abs,mod_ssl和mod_deflate, 对编译Debug和Release版本都是。 仅当srclib目录下至少存在openssl或者zlib子目录二者之一, 才能调用nmake或者明白地使用BinBuild目标直接从集成开发环境来编译这几个模块。

导出的那些.mak文件造成很大的争议,但对于 Visual C++ 5.0 的用户它们是编译mod_ssl、abs(带SSL支持的ab)和mod_deflate是必需的。 VC++ 7.0 (.net)的用户也能从中受益,用nmake编译比用 binenv要快。 从VC++ 5.0 or 6.0 集成开发环境编译所有项目,再使用Project菜单 - Export导出所有make文件。 为了创建全部自动产生的动态目标你必须首先编译项目,以便互相之间的依存关系可以被正确解析。运行下面命令修正路径使之能编译到任何位置:

perl srclibaprbuildfixwin32mak.pl

你必须在httpd源码树的顶层目录输入这个命令。 当前目录及其子目录下所有的.mak and .dep项目文件都将被改正,并且时间戳被调节到与.dsp一致。

如果你贡献修正项目文件的补丁,我们必须以Visual Studio 6.0 格式来确认项目文件。 改动应该简单而且只带有最少的编译和连接标记以便能够被从VC++ 5.0 到 7.0 的所有环境识别。


项目组件

Apache.dsw工作区文件和makefile.win nmake脚本都是以下列顺序编译Apache服务器的.dsp项目文件:

srclibaprapr.dsp
srclibaprlibapr.dsp
srclibapr-utilurigen_uri_delims.dsp
srclibapr-utilxmlexpatlibxml.dsp
srclibapr-utilaprutil.dsp
srclibapr-utillibaprutil.dsp
srclibpcredftables.dsp
srclibpcrepcre.dsp
srclibpcrepcreposix.dsp
servergen_test_char.dsp
libhttpd.dsp
Apache.dsp
此外,modules子目录树包含了大多数模块的项目文件。

support子目录包含了一些附加程序的项目文件,它们运行时不是Apache的一部分, 但是管理员要使用它们来测试Apache和维护密码与日志文件。 Windows平台特有的支持项目在supportwin32目录下。

supportab.dsp
supporthtdigest.dsp
supporthtpasswd.dsp
supportlogresolve.dsp
supportrotatelogs.dsp
supportwin32ApacheMonitor.dsp
supportwin32wintty.dsp
一旦编译了Apache,它需要被安装在它的服务器根目录,缺省是在同一个盘符下的Apache2目录。

要自动编译和安装所有文件到指定的目录dir,使用下列nmake命令之一:

nmake /f Makefile.win installr INSTDIR=dir

nmake /f Makefile.win installd INSTDIR=dir

INSTDIR的dir参数给出了安装目录;如果要安装到Apache2目录可以省略。

安装结果如下列:

dirbinApache.exe - Apache可执行文件
dirbinApacheMonitor.exe - 服务监视器托盘图表工具
dirbinhtdigest.exe - 摘要授权密码文件工具(Digest auth password file utility)
dirbinhtdbm.exe - SDBM授权数据库密码文件工具(SDBM auth database password file utility)
dirbinhtpasswd.exe - 基本授权密码文件工具(Basic auth password file utility)
dirbinlogresolve.exe - 日志文件dns名称查找工具
dirbinrotatelogs.exe - 日志文件遍历工具
dirbinwintty.exe - 控制台窗口工具
dirbinlibapr.dll - Apache可移植运行时共享库
dirbinlibaprutil.dll - Apache运行时共享库工具
dirbinlibhttpd.dll - Apache核心库
dirmodulesmod_*.so - Apache可装载模块
dirconf - 配置目录
dirlogs - 空日志目录
dirinclude - C语言头文件
dirlib - 连接库文件
关于从开发树编译Apache的警告
在每次发布发行版本之间,只有.dsp文件被维护。 考虑到会对审阅者的时间造成巨大浪费,并不重新产生.mak文件。 因此,你不能依靠上述的NMAKE命令来编译修订过的.dsp项目文件, 除非你自己从项目中导出全部.mak文件。如果你在Microsoft Developer Studio环境中编译这样做是不必要的。
同时注意在导出make文件之前编译BuildBin目标项目是非常值得的(或者用命令行目标 _apacher或_apached)。 许多文件在编译过程中自动产生。只有一次完全编译才提供为正确的编译行为编译正确的依存关系树所需要的全部依赖文件。
为创建供发布的.mak文件,一定要检查.mak (或.dep)中Platform SDK和其他头文件的依存性。 DevStudioSharedIDEbin(VC5)或者DevStudioCommonMSDev98bin(VC6) 目录包含了sysincl.dat文件, 其中列出了所有的例外情况来告诉VC++创建依存关系时不扫描列表中的文件, 更新此文件以包含这些头文件 (同时包括正斜杠和反斜杠路径,比如sys/time.h和systime.h要同时列出)。 在发布的.mak文件中包含一个本地安装路径将使编译完全失败,所以, 不要忘了运行srclib/apr/build/fixwin32mak.pl来修正.mak文件中的绝对路径。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-522795-1-1.html 上篇帖子: Windows 7 常用技巧 下篇帖子: windows server 2003实验指导(完全版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表