在WINDOWS环境下编译APACHE源码

下载最新源码

下载地址(http://apache.org/dyn/closer.cgi),可以选择国内的镜像地址,如:

目前最新版为2.2.25,最好下载win版本的:httpd-2.2.25-win32-src.zip

编译环境

默认的配置是VC6,所以直接用VC6即可编译,但需要安装Windows SDK,由于现在下载到的sdk已经是Win7/Win8版本的了,与VC6并不兼容,所以需要下载早期的版本,我尝试了winxp和win2003的sdk,都可以使用。sdk装好后,需要配置VC,如下图:

缺少SDK,会提示找不到文件:WtsApi32.h

适当修改源码

把下载的源码解压缩后,如果立即编译,会出现一些错误,所以需要对源码进行适当的修正。

1 修改srclib/apr/include/apr_want.h文件,添加下面几行代码:

#if APR_HAVE_STRINGS_H
#undef APR_HAVE_STRINGS_H
#endif

#if APR_HAVE_ARPA_INET_H
#undef APR_HAVE_ARPA_INET_H
#endif

如果不进行修改,可能与遇到这些错误:

.../srclib/apr/include/apr_want.h: Could not find the file strings.h
.../srclib/apr/include/apr_want.h: Could not find the file arpa/inet.h

2 修改 ssrclib\apr-util\include\apr_ldap.h.in,有资料说应修改apr_ldap.h,但这个文件最前面很清楚注明了,apr_ldap.h实际上编译器根据由apr_ldap.h.in自动生成的,所以修改apr_ldap.h并不能解决问题。

在apr_ldap.h.in文件的前面加上如下代码:

#ifdef LDAP_VERSION_MAX
#undef LDAP_VERSION_MAX
#endif

#ifndef LDAP_VERSION_MAX
#define LDAP_VERSION_MAX 3
#endif

如果不修改,会提示错误:

apr_ldap_stub.c ./include/apr_ldap.h: fatal error C1189: #error :
Support for LDAP v2.0 toolkits has been removed from apr-util.
Please use an LDAP v3.0 toolkit ... ...

3 修改srclib\apr-util\dbd\apr_dbd_odbc.c,在108行加入下面的代码:

typedef INT32 SQLLEN; typedef UINT32 SQLULEN;

如果不修改,会提示错误:

.../srclib/apr-util/dbd/apr_dbd_odbc.c : error C2061: syntax error : identifier 'SQLLEN'
.../srclib/apr-util/dbd/apr_dbd_odbc.c : error C2061: syntax error : identifier 'SQLULEN'

4 修改srclib/apr-util/ldap/apr_ldap_init.c,在196行加入下面的代码:

#ifndef LDAP_VENDOR_NAME
#define LDAP_VENDOR_NAME " Win32/VC6 "
#endif

如果不修改,出现如下错误:

.../srclib/apr-util/ldap/apr_ldap_init.c : error C2146: syntax error : missing ';' before identifier 'LDAP_VENDOR_NAME'
.../srclib/apr-util/ldap/apr_ldap_init.c : error C2065: 'LDAP_VENDOR_NAME' : undeclared identifier
.../srclib/apr-util/ldap/apr_ldap_init.c : error C2143: syntax error : missing ';' before 'string'

编译

最后,进行Rebuild All。

Good Luck!

This entry was posted in 互联网, 说明书.

发表评论