C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)



名词解释:apxs


apxs is a tool for building and installing extension modules for the Apache HyperText Transfer Protocol (HTTP) server.

apxs是用来编译和安装 apache 服务器的扩展模块(mod)、也能生成项目模版(下面有具体使用说明)

名词解释:MinGW

MinGW,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,

允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。

MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,

在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,

可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。



一、apache mod模块 windows开发

1)


下载apxs apxs_win32.tar.gz,下载地址

http://download.csdn.net/detail/tengyunjiawu_com/9811400



2)

安装strawberryperl或active perl

下载地址:http://strawberryperl.com/releases.html

我安装的是active perl,所以还需要安装 dmake

dos命令行执行:ppm install dmake



3)解压apxs_win32.tar.gz 

   解压到C:\apache\apache2.4.9\bin\apxs



4)进入C:\apache\apache2.4.9\bin\apxs目录

perl Configure.pl --with-apache2=D:/wamp/bin/apache/apache2.4.9 --with-apache-prog=httpd.exe



5)切换到Apache安装目录下的bin文件夹中,输入apxs,

cd C:\apache\apache2.4.9\bin

apxs

输出:如有解释apxs用法的文本出现(如下),则表明安装完成。

D:\wamp\bin\apache\apache2.4.9\bin>apxs

Usage: apxs -g [-S <var>=<val>] -n <modname>

      apxs -q [-v] [-S <var>=<val>] <query> ...

      apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]]

      [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>]

      [-Wl,<flags>] [-p] <files> ...

      apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...

      apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...



6)将apxs所在的目录设置加入系统环境变量PATH



7)使用apxs


apxs编译时还需用到C/C++编译器,一般有两种选择,一种是使用VC(Visual Studio)自带的编译器,还有一种就是自行安装,比如minGW等。

对使用VS编译的,可尝试修改apache下的build目录中config_vars.mk配置文件:

CC = gcc 的gcc改为cl.exe

LD = g++的g++改为link.exe

CPP = gcc-E的gcc-E删掉

我因为使用的是mingw,所以,实际应用步骤可能不太完整,所以使用VS2017编译的时候没有使用apxs进行编译

vs2017编译如下:

8)用VS2017编译apache模块

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

   b)打开vs2017建立一个空的C语言项目,项目名称mod_helloworld,将上面用apxs生成的mod_helloworld.c拖进项目

   c)项目设置部分

1、include C:\apache\apache2.4.9\include 

2、lib部分附加目录库 C:\apache\apache2.4.9\lib 

3、链接器,命令行,其他选项添加 libapr-1.lib libaprutil-1.lib libapriconv-1.lib libhttpd.lib

        4、代码生成 运行库选择:多线程 (/MT)

   d)进入helloworld目录,编辑mod_helloworld.c(这就是我们要开发的内容),代码如下:

=========================================================================================

/* 

**  mod_helloworld.c -- Apache sample helloworld module

**  [Autogenerated via ``apxs -n helloworld -g'']

**

**  To play with this sample module first compile it into a

**  DSO file and install it into Apache's modules directory 

**  by running:

**

**    $ apxs -c -i mod_helloworld.c

**

**  Then activate it in Apache's httpd.conf file for instance

**  for the URL /helloworld in as follows:

**

**    #   httpd.conf

**    LoadModule helloworld_module modules/mod_helloworld.so

**    <Location /helloworld>

**    SetHandler helloworld

**    </Location>

**

**  Then after restarting Apache via

**

**    $ apachectl restart

**

**  you immediately can request the URL /helloworld and watch for the

**  output of this module. This can be achieved for instance via:

**

**    $ lynx -mime_header http://localhost/helloworld 

**

**  The output should be similar to the following one:

**

**    HTTP/1.1 200 OK

**    Date: Tue, 31 Mar 1998 14:42:22 GMT

**    Server: Apache/1.3.4 (Unix)

**    Connection: close

**    Content-Type: text/html

**  

**    The sample page from mod_helloworld.c

*/ 





#include "httpd.h"

#include "http_config.h"

#include "http_protocol.h"

#include "ap_config.h"





/* The sample content handler */

static int helloworld_handler(request_rec *r)

{

    if (strcmp(r->handler, "helloworld")) {

        return DECLINED;

    }

    r->content_type = "text/html";      





    if (!r->header_only)

        ap_rputs("小样,用C语言开发一个Apache的Module,这下牛逼了吧\n", r);

    return OK;

}





static void helloworld_hooks(apr_pool_t *p)

{

    ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);

}





/* Dispatch list for API hooks */

module AP_MODULE_DECLARE_DATA helloworld_module = {

    STANDARD20_MODULE_STUFF, 

    NULL,                  /* create per-dir    config structures */

    NULL,                  /* merge  per-dir    config structures */

    NULL,                  /* create per-server config structures */

    NULL,                  /* merge  per-server config structures */

    NULL,                  /* table of config file commands       */

    helloworld_hooks  /* register hooks                      */

};

=========================================================================================

   e)编译生成如下图:

f)将mod_helloworld.dll拷贝到Apache2.2\modules下

   g)修改Apache2.2\conf\httpd.conf,在末尾加上

     LoadModule helloworld_module modules/mod_helloworld.dll #(dll改成扩展名.so也一样的)

     <Location /helloworld>

setHandler helloworld

     </Location>

    

   h)启动apache,在浏览器里面输入http://loacalhost/helloworld,就可以看到我们返回的内容)

     大功告成





9)VS2017整体工程代码,下载地址:

http://download.csdn.net/detail/tengyunjiawu_com/9811386

10)运行结果如下:http://loacalhost/helloworld

本人原创,未经许可,可以随意转载!

C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)的更多相关文章

  1. C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)

    C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇) 名词解释:apxs apxs is a tool for building and installi ...

  2. 软件开发流变史:从瀑布开发到敏捷开发再到DevOps

    作为在20世纪70年代.80年代盛极一时的软件开发模型,瀑布模型通过制定计划.需求分析.软件设计.程序编写.软件测试.运行维护等6个流程将整个软件生命周期衔接起来.这6个流程有着严格的先后次序之分,只 ...

  3. Apache Solr采用Java开发、基于Lucene的全文搜索服务器

    http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...

  4. OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统

    OSGi 系列(一)之什么是 OSGi :Java 语言的动态模块系统 OSGi 的核心:模块化.动态.基于 OSGi 就可以模块化的开发 java 应用,模块化的部署 java 应用,还可以动态管理 ...

  5. Apache Mod/Filter Development

    catalog . 引言 . windows下开发apache模块 . mod进阶: 接收客户端数据的 echo 模块 . mod进阶: 可配置的 echo 模块 . mod进阶: 过滤器 0. 引言 ...

  6. 10个强大的Apache开源模块

    1.单点登录模块 LemonLDAP LemonLdap可以很棒地实现Apache的SSO功能,并且可以处理超过 20 万的用户请求.LemonLdap支持Java, PHP, .Net, Perl, ...

  7. OSGi是什么:Java语言的动态模块系统(一)

    OSGi是什么 OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构.OSGi容器已有多家开源实现,比如Knoflerfish.Equinox和Apache的Felix.您 ...

  8. 开启Apache mod_rewrite模块(解决404 Not Found)

    网站搭建完成了,进入登录界面就是访问不了. 原因大概是没有开启Apache mod_rewrite模块,或者没有配置完全. 步骤1: 启用mod_rewrite模块 在conf目录的httpd.con ...

  9. Apache Spark1.1.0部署与开发环境搭建

    Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce ...

随机推荐

  1. 2018.09.25 bzoj3572: [Hnoi2014]世界树(虚树+树形dp)

    传送门 虚树入门题? 好难啊. 在学习别人的写法之后终于过了. 这道题dp方程很好想. 主要是不好写. 简要说说思路吧. 显然最优值只能够从子树和父亲转移过来. 于是我们先dfs一遍用儿子更新父亲,然 ...

  2. hdu-1067(最大独立集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 题意:一个男生集合和一个女生集合,给出两个集合之间一一对应的关系,求出两个集合中最大独立集的点数 ...

  3. HDU 5957 Query on a graph (拓扑 + bfs序 + 树剖 + 线段树)

    题意:一个图有n个点,n条边,定义D(u,v)为u到v的距离,S(u,k)为所有D(u,v)<=k的节点v的集合 有m次询问(0<=k<=2): 1 u k d:将集合S(u,k)的 ...

  4. org.apache.cxf 官方骨架

    mvn archetype:generate -DarchetypeCatalog=remote 用 cxf 筛选结果 官方三大项目骨架 org.apache.cxf:cxf-http-basic ( ...

  5. ubuntu 14.04查看java的安装路径

    有时候,使用apt-get install 安装了某个软件之后,却不知道这个软件的安装路径在哪里. 那怎么样去找出这个软件的安装路径呢? 下面我们java 这个软件为例, 找出ubuntu 14.04 ...

  6. 【翻译】JavaScript框架的最终指南

    翻译原文链接 我的翻译小站 紧跟JavaScript框架的脚步是一个挑战.现在有太多的框架,几乎一个月就会出来一个新的.那么如何知道到底哪一个比较合适你的项目呢?它们分别有什么优点和缺点呢?你要如何开 ...

  7. Python + Robotframework + Appium 之APP自动化测试实践(一)

    前面的文章已经介绍了Robotframework+Appium的安装及小试牛刀(For Android) 下面来个简单的实践,话不多说,还以是计算器为例,直接上代码,详情如下: *** Setting ...

  8. oracl中的大数据类型clob

    建表 create table test_name( test_id   number(6) not null, img_data clob ); 在java中该表所对应的po为: class Tes ...

  9. CentOS搭建NFS服务

    系统结构 ----------------------------------------------------------------------------------------------- ...

  10. 使用 X-Frame-Options 防止被iframe 造成跨域iframe 提交挂掉

     Refused to display 'http://www.***.com/login/doLogin.html' in a frame because it set 'X-Frame-Optio ...