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
为更容易构建和安装的模块。
-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库。
-i
这表明安装操作和安装一个或多个服务器的动态共享对象 modules目录中。
-a
这激活自动添加相应的模块 LoadModule
Apache的行 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
$ _
微信
支付宝