0

说明!本文编译出来的apache仅仅是用于测试,如果你采用本文的方法来编译apache并用于生产环境,出现任何后果我概不负责。

如果真要用于生产环境,十字本人还是推荐用linux或bsd跑,安全性是windows没法比的。 

近日研究了一下在windows下编译apache服务器的方法,发现网上能搜索到的文章大多不够详尽,特别是早期的一些文章已不适用于当前的环境,所以,专门做个总结。

编译环境如下:

集成环境:
Microsoft Visual C++ 2008 Express Edition,可以从微软网站上下到。

下载主要程序的源代码:
apache源代码,文件名为httpd-2.2.11-win32-src-r2.zip
下载地址:http://www.apache.org/dist/httpd/httpd-2.2.11-win32-src-r2.zip

openssl源代码,文件名为openssl-0.9.8k.tar.gz,openssl用于构建apache的mod_ssl模块:
下载地址:http://www.openssl.org/source/openssl-0.9.8k.tar.gz

zlib源代码,文件名为zlib-1.2.3.tar.gz,zlib用于构建apache的mod_deflate模块:
下载地址:http://www.zlib.net/zlib-1.2.3.tar.gz

其它工具:
Activeperl,编译openssl时需要用到:
下载地址:http://downloads.activestate.com/ActivePerl/releases/5.10.1.1007/ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi

nasm汇编器,编译openssl时需要用到:
下载地址:http://www.nasm.us/pub/nasm/releasebuilds/2.06/win32/nasm-2.06-win32.zip

awk,在安装apache时需要用到(只编译不需要),请把这个awk95.exe改名成awk.exe:
下载地址:http://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe

apxs,Apache 扩展工具,方便你为apache编译和安装扩展模块:
下载地址:http://perl.apache.org/dist/win32-bin/apxs_win32.tar.gz

接下来,安装上面下载到的各个工具、解压下载到的源代码:
Microsoft Visual C++ 2008 Express Edition安装到默认的C:\Program Files\Microsoft Visual Studio 9.0目录下
ActivePerl安装到E:\perl
Nasm解压到E:\unxutils\nasm
Awk95.exe重命名为awk.exe,我放在了E:\unxutils\bin目录下

解压openssl,apache,zlib,apxs的源代码到E:\build

开始编译:作者本人建议用命令行模式来进行编译
首先,需要创建上述各工具的路径设置文件,也就是set PATH批处理文件,当然,你也可以将这些程序的路径添加到系统路径中。

建立winbuild.bat,并将上面各路径设置加入:


----------------------winbuild.bat文件内容----------------------------

@set PATH=%PATH%;E:\perl\bin
@set PATH=%PATH%;E:\unxutils\bin
@set PATH=%PATH%;E:\unxutils\nasm

----------------------winbuild.bat文件内容----------------------------

将这个文件保存到E:\build。至于为什么要专门建立这个文件,下文有叙述。

注意:如果你为了图方便,将这些工具的路径添加到系统路径中,请注意搜索路径的设置顺序,比如,
@set PATH= E:\unxutils\bin;%PATH%;……
这个路径的设置是先搜索E:\unxutils\bin,然后再搜索系统%PATH%……
@set INCLUDE= E:\unxutils\include ;%INCLUDE%;……
这个路径的设置是先搜索E:\unxutils\include,再搜索系统%INCLUDE%……

如果你的系统中不存在其它的gnu工具,那么这个设置无可厚非,但是,在你的系统中,同时安装有其它的gnu工具,如,MinGW,GnuWin32,CygWin等一大堆的gnu工具集时,错误或过多的设置搜索路径轻则会导致你在编译程序时出现错误,而严重的结果就是,程序可以被编译,但是,你的程序已经被非标准的头文件和库文件所“污染”,而最终导致程序调试极为困难。
这也是我强烈建议用命令行来编译程序的原因!在编译不同种类(msvc,gcc)的程序时,使用命令行方式进行编译可以在编译前先设置好纯净的编译环境,而不必每次都在vs ide里做可笑的设置。 

然后,找到vsvars32.bat,这是Microsoft Visual C++ 2008 Express Edition的命令行模式,在我机器上的位置是C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\,我们需要把这个文件复制一份到E:\build目录下,并对其进行修改:

用记事本打开该文件,在第34行,也就是一大堆的set PATH,set INCLUDE,set LIB和@goto end之间,加入一行@cmd /k。如果不加入该行,那么执行vsvars32.bat后只会闪一下dos黑屏。

做完上述设置后,你的E:\build目录下应该包含四个文件夹和两个批处理文件:
四个文件夹分别为:openssl-0.9.8k、zlib-1.2.3、httpd-2.2.11、apxs
两个批处理文件分别为:vsvars32.bat、winbuild.bat

然后,我们开始编译,请首先执行修改过的vsvars32.bat,会出现一个命令行窗口,然后,执行winbuild.bat,这样,我们的环境就设置完成了。

建立winbuild.bat的原因是为了保证编译环境的纯净。例如,以后我打算编译qt的程序,那么,可以建立qt.bat并在执行vsvars32.bat后调用这个文件。

(可选)首先编译openssl:
可选的原因是,如果你不需要apache的mod_ssl模块,那么就无需编译openssl。

E:\build\>cd openssl-0.9.8k
E:\build\openssl-0.9.8k>perl Configure VC-WIN32 --prefix=E:/unxutils
E:\build\openssl-0.9.8k>ms\do_nasm
E:\build\openssl-0.9.8k>nmake -f ms\ntdll.mak install

编译好的openssl会以标准的unix风格的目录结构安装到E:\unxutils目录下。

如果你只编译不安装,那么就无需执行第四行命令。

(可选)编译zlib:
可选的原因是,如果你不需要apache的mod_deflate模块,那么就无需编译zlib。

E:\build\openssl-0.9.8k>cd ..\zlib-1.2.3
E:\build\zlib-1.2.3>nmake -f win32\Makefile.msc

编译apache:

编译apache前需要把zlib和openssl复制到apache源代码目录的srclib目录下:


E:\build\zlib-1.2.3>cd ..
E:\build\>xcopy /e /i zlib-1.2.3 httpd-2.2.11\srclib\zlib
E:\build\>xcopy /e /i openssl-0.9.8k httpd-2.2.11\srclib\openssl

事实上,你只需要相应的头文件和导入库文件:

对于zlib,srclib\zib目录下只需要有zconf.h,zlib.h,zlib1.dll,zdll.lib四个文件即可!zlib1.dll会在apache安装时复制到apache的bin目录下。

对于openssl,srclib\openssl目录下只需要有inc32目录和out32dll目录!inc32目录来自于openssl的源码目录,%openssl_src_dir%\inc32\openssl目录在openssl安装时会复制成%openssl_install_dir%\include\openssl目录,out32dll目录下只需要有openssl.exe,libeay32.dll,ssleay32.dll,libeay32.lib,ssleay32.lib,其中openssl.exe,libeay32.dll,ssleay32.dll会在apache安装时复制到apache的bin目录下。

导入库文件是必须的,没有导入库文件并且在apache的srclib目录下存在zlib或openssl目录时,编译apache会出现错误。

接下来,开始编译apache:

E:\build>cd httpd-2.2.11
E:\build\httpd-2.2.11>nmake -f Makefile.win installr SERVERNAME=localhost INSTDIR=E:\websrv\apache

程序运行完后,apache被安装到E:\websrv\apache目录下。

(可选)安装apxs - Apache 扩展工具:

E:\build\httpd-2.2.11>cd ..\apxs
E:\build\apxs>perl Configure.pl --with-apache2=E:\websrv\apache --with-apache-prog=httpd.exe

至此,安装全部完成。

关于apache的设置部分,请参考,apache的设置部分。
有关openssl部分的设置,请关注我稍后的文章 。


http://hi.baidu.com/travel981cn/item/77d371c284f65852ad00ef55

关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.