逐梦论坛's Archiver

shillan 发表于 2013-9-8 12:00

在WINDOWS环境下编译APACHE源码的方法

[p=30, 2, left][font=宋体]网上数种不同的说明,让我相当困惑,由此还是亲身试验,寻找可行的方法。[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]目标:在[/font][font=Times New Roman]WINDOWS2003[/font][font=宋体]环境下编译[/font][font=Times New Roman]APACHE[/font][font=宋体]源码版本[/font][/p][p=30, 2, left][font=宋体]原因:[/font][font=Times New Roman]APACHE[/font][font=宋体]的普通使用版本漏洞较多,而发放的补丁是以源码形式提供,[/font][font=Times New Roman]WINDOWS[/font][font=宋体]环境下不方便编译[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]解决:最好的方式还是使用[/font][font=Times New Roman] APACHE[/font][font=宋体]官方提供的“修复了[/font][font=Times New Roman]BUG[/font][font=宋体]放出的[/font][font=Times New Roman]XX[/font][font=宋体]版本的源码包”,基于它再去作编译工作,有效节省我们的时间,也避免带来[/font][font=Times New Roman]APACHE[/font][font=宋体]某模块不能使用的问题[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman][/font] [/p][font=黑体]下载[/font]APACHE[font=黑体]源码包[/font][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]在[/font][url=http://labs.renren.com/apache-mirror/httpd/][font=Times New Roman][color=#0000ff]http://labs.renren.com/apache-mirror//httpd/[/color][/font][/url][font=宋体]找到[/font][font=Times New Roman]WIN[/font][font=宋体]环境的适合版本[/font][/p][p=30, 2, left][font=宋体]注意版本后面的时间,他代表打入最新的补丁包会有哪些[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][font=黑体]本地环境[/font][p=30, 2, left][font=宋体]安装[/font][font=Times New Roman]VC6[/font][font=宋体]绿色版,并[/font][font=Times New Roman]COPY[/font][font=宋体]一个[/font][font=Times New Roman]EXE[/font][font=宋体]文件至他的安装目录下[/font][/p][p=30, 2, left][font=Times New Roman]D:\Program Files\Microsoft Visual Studio\Common\Tools[/font][/p][p=30, 2, left][font=宋体]并把此文件[/font][font=Times New Roman]awk95.exe[/font][font=宋体]从改名为:[/font][font=Times New Roman]awk.exe[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]因为是[/font][font=Times New Roman]VC6[/font][font=宋体]绿色版,功能不全,应当把[/font][font=Times New Roman]WINDOWS/SYSTEM32[/font][font=宋体]目录下的[/font][font=Times New Roman]XCOPY.EXE[/font][font=宋体]放至安装目录的[/font][font=Times New Roman]BIN[/font][font=宋体]目录下[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman][/font] [/p][font=黑体]编译调试上的若干问题[/font][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]打开[/font][font=Times New Roman]APAHCE[/font][font=宋体]源码包,找到[/font][font=Times New Roman]Apache.dsw[/font][font=宋体]作为[/font][font=Times New Roman]VC[/font][font=宋体]工程打开[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman]OK[/font][font=宋体]后打开菜单:工程-设置活动工程-[/font][font=Times New Roman]installbin[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]请注意以下的操作,注释用的语法是[/font][color=red][font=Times New Roman]/* */[/font][/color][font=宋体],一开始我就以为是[/font][color=red][font=Times New Roman]#[/font][/color][font=宋体]号,结果连连出错[/font]
[/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体][size=12pt]1) [/size][/font][font=宋体][size=12pt]下载源码后解压,使用VC打开Apache.dsw文件,设置BuildBin classess 工程为Active。[/size][/font][font=宋体][size=12pt] [color=black]
2[/color][color=black])开始编译,在编译中VC可能会提示错误。[/color] [color=black]
3[/color][color=black])如果编译提示没有找到strings.h和inet.h 错误:[/color]
[/size][/font][/p][p=30, 2, left][font=宋体][size=12pt]D:/httpd-2.2.11/srclib/apr/include/apr_want.h(52): Could not find the file strings.h
D:/httpd-2.2.11/srclib/apr/include/apr_want.h(121): Could not find the file arpa/inet.h   [/size][/font][/p][p=30, 2, left]
[font=宋体][size=12pt]打开httpd-2.2.11/srclib/apr/include/apr_want.h 文件,把以下行注释掉:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]#if APR_HAVE_STRINGS_H
#include <strings.h>
#endif[/size][/font][/p][p=30, 2, left]
[/p][p=30, 2, left][font=宋体][size=12pt]#if APR_HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif[/size][/font][/p][p=30, 2, left][font=宋体][size=12pt]
4[/size][/font][font=宋体][size=12pt]) 如果编译时候提示不支持[/size][/font][font=宋体][size=12pt] LDAP v2.0[/size][/font][font=宋体][size=12pt]错误:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]apr_ldap_stub.c
./include/apr_ldap.h(132) : fatal error C1189: #error :  Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
apr_ldap_url.c
apr_ldap_url.c
./include/apr_ldap.h(132) : fatal error C1189: #error :  Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
Generating Code...[/size][/font][/p][p=30, 2, left]
[font=宋体][size=12pt]打开httpd-2.2.11/srclib/apr-util/include/apr_ldap.h 文件,注释该行代码:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]5[/size][/font][font=宋体][size=12pt]) 如果出现identifier 'SQLLEN' 错误:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]D:httpd-2.2.11/srclib/apr-util/dbd/apr_dbd_odbc.c(134) : error C2061: syntax error : identifier 'SQLLEN'[/size][/font]
[/p][p=30, 2, left]
[font=宋体][size=12pt]打开文件:httpd-2.2.11/srclib/apr-util/dbd/apr_dbd_odbc.c,在文件头部添加以下行:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]typedef INT32 SQLLEN;[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]6) [/size][/font][font=宋体][size=12pt]如果出现LDAP_VENDOR_NAME 错误:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]D:/httpd-2.2.11/srclib/apr-util/ldap/apr_ldap_init.c(194) : error C2146: syntax error : missing ';' before identifier 'LDAP_VENDOR_NAME'
D:/httpd-2.2.11/srclib/apr-util/ldap/apr_ldap_init.c(195) : error C2065: 'LDAP_VENDOR_NAME' : undeclared identifier
D:/httpd-2.2.11/srclib/apr-util/ldap/apr_ldap_init.c(195) : error C2143: syntax error : missing ';' before 'string'[/size][/font][/p][p=30, 2, left]
[font=宋体][size=12pt]打开httpd-2.2.11/srclib/apr-util/ldap/apr_ldap_init.c 文件,注释以下行:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]LDAP_VENDOR_NAME[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]7) [/size][/font][font=宋体][size=12pt]如果出现[b]WtsApi32.h[/b]没有包含错误:[/size][/font]
[/p][p=30, 2, left][font=宋体][size=12pt]D:/httpd-2.2.11/support/win32/ApacheMonitor.c(45) : fatal error C1083: Cannot open include file: [b]WtsApi32.h[/b]': No such file or directory[/size][/font][/p][p=30, 2, left]
[font=宋体][size=12pt]该提示表示没有安装或配置Microsoft 的[b]PlatformSDK[/b],需要去微软网站上下载[b]PlatformSDK[/b],并安装。[/size][/font][font=宋体][size=12pt] [color=black]
8) [/color][color=black]如果提示awk 错误:[/color]
[/size][/font][/p][p=30, 2, left][font=宋体][size=12pt]'awk' [/size][/font][font=宋体][size=12pt]不是内部或外部命令,也不是可运行的程序或批处理文件。
Error executing c:/windows/system32/cmd.exe.[/size][/font][/p][p=30, 2, left]
[font=宋体][size=12pt]这个错误是由于没有安装awk工具导致,可以先到http://www.gnu.org/software/gawk/ 下载一个gawk进行安装。如果安装的目录为:C:/Program Files/GnuWin32,在该目录下可以看到一个bin目录,需要把该目录添加到VC Executable files。我的bin目录完整路径为:C:/Program Files/GnuWin32/bin,以下图以该目录为例子进行添加[/size][/font]
[/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=Times New Roman][/font] [/p]Platform SDK February 2003:[p=30, 2, left][font=Times New Roman]http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]如果没有,在搜索框中输入[/font][font=Times New Roman]Platform SDK[/font][font=宋体],找到[/font][font=Times New Roman]2003[/font][font=宋体]的版本下载进行安装[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]一,搜出目录下[/font][font=Times New Roman]WtsApi32.h[/font][font=宋体]文件,[/font][font=Times New Roman]COPY[/font][font=宋体]至[/font][font=Times New Roman]D:\Program Files\Microsoft Visual Studio\VC98\Include[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]二,搜出目录[/font][font=Times New Roman]D:\Program Files\Microsoft Platform SDK\Lib[/font][font=宋体]下[/font][font=Times New Roman]wtsapi32.lib[/font][font=宋体]文件,[/font][font=Times New Roman]COPY[/font][font=宋体]至[/font][/p][p=30, 2, left][font=Times New Roman]D:\Program Files\Microsoft Visual Studio\VC98\Lib[/font][/p][p=30, 2, left][font=Times New Roman][/font] [/p][font=黑体]最终输出[/font][p=30, 2, left][font=Times New Roman][/font] [/p][p=30, 2, left][font=宋体]我很困惑的是为什么输出的目录最终为:[/font][font=Times New Roman]C:\Apache22[/font][/p][p=30, 2, left][font=宋体]这个让我找了很久,我一直以为会在源码同级目录下,但是经过如上的各次调整后,输出出来的版本相当正常。[/font][/p]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.