[普通]apxs——APache扩展工具

作者(passion) 阅读(1137次) 评论(0) 分类( apache)

apxs是一个工具用于构建和安装扩展模块的Apache超文本传输协议(HTTP)服务器。这是通过构建一个动态共享对象(DSO)从一个或多个源或对象 files然后可以加载到Apache服务器在运行时通过 LoadModule指令从 mod_so.

所以使用这个扩展机制平台必须支持和Apache DSO特性 httpd二进制建成了 mod_so模块。的 apxs工具自动抱怨如果不是这种情况。你可以检查这个自己手动运行命令

$ httpd -l

该模块 mod_so应该是显示列表的一部分。如果满足这些要求您可以很容易地扩展您的Apache服务器的功能通过安装您自己的模块与DSO的帮助机制 apxs工具:

$ apxs -i -a -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
$ apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _

的参数 files可以是任何C源文件(. C),对象文件(. o)甚至图书馆存档(。)。的 apxs工��自动识别这些扩展并自动使用的C源文件编译时使用的对象和归档文件链接阶段。但是当使用预编译对象确保编译为位置独立的代码(PIC)能够使用它们的动态加载的共享对象。比如与你总是只需要使用GCC -fpic。对于其他C编译器咨询其手册页或在观看国旗 apxs用来编译目标文件。

为更多的细节在Apache DSO支持阅读文档 mod_so甚至阅读 src/modules/standard/mod_so.c源文件。


简介

apx型- g(s name=value)- n modname

apx型q[v][s name=value ] query ...

apx型- c(s name=value][o dsofile][我 incdir][- d name=value][- l libdir][- l libname][wc,compiler-flags][- wl,linker-flags ] files ...

apx型-(- s name=value][n modname][-][a] dso-file ...

apx型- e[s name=value][n modname][-][a] dso-file ...

顶部

选项

常见的选项

  • -n modname

  • 这个显式地设置模块的名称 -i(安装) -g(模板生成)的选择。使用这个来显式地指定模块名称。对的选择 -g这是必需的,因为选项 -i apxs工具试图确定名称从源或(后备)至少通过猜测它的文件名。

查询选项

  • -q

  • 执行一个查询变量和用于构建环境设置 httpd。当调用没有 query参数,它打印所有已知的变量和它们的值。可选 -v参数列表的格式输出。

    使用这个手动确定设置用于构建 httpd加载模块。例如使用

    INC=-I`apxs -q INCLUDEDIR`

    在你自己的makefile如果你需要手动访问Apache的C头文件。

配置选项

  • -S name=value

  • 这个选项更改上述apx型设置。

模板生成选项

  • -g

  • 这生成一个目录 name(看到选项 -n),有两个文件:一个示例模块源文件命名 mod_name.c可以用作模板创建自己的模块或作为玩apx型的快速启动机制。和一个相应的 Makefile为更容易构建和安装的模块。

DSO编译选项

  • -c

  • 这表明编译操作。它首先编译C源文件(. C) files到相应对象文件(. o),然后构建一个动态共享对象 dsofile通过将这些对象文件加上其余的对象文件(。o和。) files。如果没有 -o选项指定输出文件从第一个猜文件名 files因此通常默认 mod_name.so.

  • -o dsofile

  • 显式地指定的文件名创建动态共享对象。如果没有指定名称不能猜的 files列表中,回退的名字 mod_unknown.so使用。

  • -D name=value

  • 这个选项是直接通过编译命令(s)。用它来添加自己的定义的构建过程。

  • -I incdir

  • 这个选项是直接通过编译命令(s)。用它来添加自己的构建过程包括目录搜索。

  • -L libdir

  • 这个选项直接通过链接器命令。使用这个来添加自己的图书馆目录搜索构建过程。

  • -l libname

  • 这个选项直接通过链接器命令。使用这个来添加自己的库搜索构建过程。

  • -Wc,compiler-flags

  • 这个选项传递 compiler-flags作为额外的旗帜 libtool --mode=compile命令。使用这个来添加本地compiler-specific选项。

  • -Wl,linker-flags

  • 这个选项传递 linker-flags作为额外的旗帜 libtool --mode=link命令。使用这个来添加本地linker-specific选项。

  • -p

  • 这个选项会导致apx型对4月/ apr-util库链接。这是有用的辅助程序编译时使用4月/ apr-util库。

DSO安装和配置选项

  • -i

  • 这表明安装操作和安装一个或多个服务器的动态共享对象 modules目录中。

  • -a

  • 这激活自动添加相应的模块 LoadModuleApache的行 httpd.conf配置文件,或者通过使它如果它已经存在。

  • -A

  • 一样的选择 -a但是创建的 LoadModule指令与散列标志前缀(#),即。,该模块是准备以后激活但最初禁用。

  • -e

  • 这表明编辑操作,可以使用的 -a -A选项类似于 -i操作编辑Apache的 httpd.conf配置文件没有试图安装模块。

顶部

例子

假设您有一个Apache模块命名 mod_foo.c这应该扩展Apache服务器功能可用。要实现这一点,你必须先编译C源到一个共享对象适合加载到Apache服务器在运行时通过以下命令:

$ apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
$ _

然后你必须更新Apache配置,确保一个 LoadModule指令存在加载这个共享对象。为了简化这一步骤 apxs提供了一个自动的方式安装的共享对象“模块”目录和更新 httpd.conf相应的文件。这可以通过运行:

$ apxs -i -a mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/conf/httpd.conf]
$ _

这种方式命名的一条线

LoadModule foo_module modules/mod_foo.so

添加到配置文件,如果还不存在。如果你想禁用默认使用 -A选项,即。

$ apxs -i -A mod_foo.c

apx型机制的一个快速测试您可以创建一个示例Apache模块模板加上相应的Makefile通过:

$ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/modules.mk
Creating [FILE] foo/mod_foo.c
Creating [FILE] foo/.deps
$ _

然后你可以立即这个示例模块编译到一个共享对象和加载到Apache服务器:

$ cd foo
$ make all reload
apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
apxs -i -a -n "foo" mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/conf/httpd.conf]
apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _


« 上一篇:wifi共享上网(至尊版wifi)
« 下一篇:ASP.NET附加数据库文件的方式,如何发布到IIS7而不导致SQLServer出错
在这里写下您精彩的评论
  • 微信

  • QQ

  • 支付宝

返回首页
返回首页 img
返回顶部~
返回顶部 img