WINDOWS 平台APACHE模块开发环境搭建

WINDOWS 平台APACHE模块开发环境搭建

1.windows下安装apache

下载地址:http://apache.dataguru.cn//httpd/binaries/win32/

 注意:一定要custom全部安装,否则就不会有includelib

本文选择安装XAMPPXAMPPApache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,该软件的下载与安装很简单,在安装过程中,会选择下载的工具包,Apache为必选项,其余根据开发环境为可选项,当然全部下载也没问题。使用该集成包的好处在于不用配置php环境,推荐新手安装。

2.安装apxs

下载地址:http://www.apachelounge.com/download/apxs_win32.zip

下载后,解压到任意盘下均可(最好放在根目录下,方便添加环境变量);

 

打开命令提示符,定位到apxs的安装目录下例如:D:\xampp\apxs执行命令

perl Configure.pl --with-apache2=\Path\to\Apache2 --with-apache-prog=httpd.exe

其中\Path\to\Apache2需要替换为Apache的实际安装路径,示例输下图一所示,示例输出如下图二所示:

 WINDOWS 平台APACHE模块开发环境搭建

图一

 WINDOWS 平台APACHE模块开发环境搭建

图二

上图提示‘perl’不是内部或外部命令,因为我们将要使用的apxs包要用到perl解析编译,所以,我们还需要安装perl。

安装完apxs工具后,需要手动将apxs加入到系统环境变量中,添加完之后将目录切换到Apache安装目录下的bin文件夹,在命令窗口输入apxs命令,若出现如下图三的帮助信息,则表明apxs的环境配置完成:(若提示“apxs不是内部或外部命令,也不是可运行的程序”,可检查环境变量是否添加成功)

WINDOWS 平台APACHE模块开发环境搭建

图三

3.安装Perl

下载地址:http://www.activestate.com/activeperl/

Perl的安装比较简单,直接安装就行,只是在完成的最后一步需要注意勾选将Perl添加到环境变量的选项,如下图四所示:

 WINDOWS 平台APACHE模块开发环境搭建

图四

 

安装完成后,再次执行上述命令:

perl Configure.pl --with-apache2=\Path\to\Apache2 --with-apache-prog=httpd.exe

若成功生成图五中框选的三个.bat文件,则表明安装成功

WINDOWS 平台APACHE模块开发环境搭建

图五

4.使用apxs

    搭建完以上环境之后,就可以在apache中生成自己的模块了,apxs编译时还需用到C/C++编译器,一般有两种选择,一种是使用VC(Visual Studio)自带的编译器,还有一种就是自行安装,比如minGW等。

对使用VS编译的,可尝试修改apache下的build目录中config_vars.mk配置文件,操作如下:(本人在修改该配置文件的时候,发现CCLD均为空,可能与VS的版本有关,这时只需要在其后添加cl.exe和 link.exe,然后去掉gcc-E即可)

 

注意:若未修改此项,则编译会报:’/nologo’不是内部或外部命令。

1)运行Visual Studio 2012 命令提示(打开方式请看本文最后一张贴图)

2)运行apxs -g -n helloworld(helloworld为模块名),会生成一个叫helloworld的目录和模板代码

3)进入helloworld目录,编辑mod_helloworld.c(这就是我们要开发的模块代码)

4)运行apxs -c -i -a mod_helloworld.c libapr-1.lib libaprutil-1.lib libapriconv-1.lib libhttpd.lib,生成mod_helloworld.so,这时我们可以到APACHE下的模块路径(\Apache\modules)中查看自己添加的模块,若没找到刚添加的mod_helloworld.so文件,则将该模块拷贝到\…\modules目录下。

5)修改Apache的配置文件,路径:Apache\conf\httpd.conf,在末尾加上如下内容:(这一步非常关键,没有修改配置文件,会使添加的模块不起作用,通常apache会自动生成下面的第一行语句,这时只需添加下面的三行语句即可,若没有自动生成,则要注意LoadModule后面需要添加mod_helloworld.so的绝对路径

 WINDOWS 平台APACHE模块开发环境搭建

当然,如果我们安装的是XAMPP时,可以直接在XAMPP的操作界面中,点击”Config”按钮,然后选择”Apachehttpd.conf”,就可以修改apache的配置文件。

6)启动apache服务器,在浏览器的地址栏输入localhost:端口号/helloworld,就可以看到我们返回的内容了。其中的端口号为配置apache的端口号,默认为80,若使用80端口无法启动apache服务器,则表面80端口被占用,这时需要修改apache的端口号,可在apache\conf\httpd.conf中修改。将配置文档中的所有80端口都改为一个未占用的端口即可。

 

注意1:若在执行上述步骤四时出现如图六错误,则表面没有使用VS本机工具命令提示,windows操作系统上的cmd窗口是不识别cl.exe命令的。

WINDOWS 平台APACHE模块开发环境搭建

图六

注意2:在进行apache开发时,apache内部是不支持printf打印消息的,若想打印消息日志,需要自定义宏进行消息打印。

注意3: 当apache开启的时候,弹出应用程序终止对话框,此时可查看httpd.conf中加载的模块。若so文件中没有此加载模块,而配置文件中包含该加载模块,则会导致apache开启失败。

注意4apache加载的自定义模块都是互相干扰的。

在我们添加helloworld模块的时候,会在httpd.conf中添加这样一行命令<Location /helloworld>,其实我们添加的自定义模块就是通过”/helloworld”来确定是否被访问的,即我们要访问mod_helloworld.so模块时,只需在浏览器中输入localhost:端口号/helloworld/就行,helloworld后面可以输入任何你需要请求的URL;但是当我们添加了另外一个模块,并设置<Location /helloworld/test>时,这时如果输入localhost:端口号/helloworld/testapache就会调用我们的第二个模块,而并非第一个。

注意5:每一次修改完apache的配置文件或者重新编译生成.so文件后,都必须重启apache服务器才会生效。

注意6:使用apxs编译多个.c文件时,必须将生成so文件对应的.c文件放在最前面,其他的.c文件放置无先后顺序。例如:要生成一个helloworld.so的模块,若apache中定义的钩子,容器等函数在helloworld.c文件中,则helloworld.c文件必须放在第一位。

WINDOWS 平台APACHE模块开发环境搭建

图七