Sth. About Apache Apxs and mod_so

By | 2014年7月18日

APXS是Apache HTTP服务器用于编译安装扩展模块的工具。
它可以将一个活多个源程序(源码包)制作成动态共享对象(*.so,位于:$APACHE_HTTPD_HOME/modules),以便于在Apache HTTPD服务启动时由mod_so的LoadModule指令加载。
On selected operating systems this module can be used to load modules into Apache at runtime via the Dynamic Shared Object(DSO) mechanism, rather than requiring a recompilation.
On Unix, the loaded code typically comes from shared object files (usually with .so extension),
on MS Windows this may either the .so or .dll extension.

APXS不是默认会安装的。
它不存在于HTTP的标准软件包(httpd)中,而是包含在httpd-devel软件包中的。

所以,如果“whereis apxs”找不到apxs的时候,可以使用YUM为HTTP添加apxs。

查看当前的Apache Http服务器是否具有mod_so模块:

使用apxs为Apache添加DSO扩展:
Eg.)

其中的参数files可以是任何C源程序文件(.c)或者目标代码文件(.o),甚至是一个库(.a)。 apxs工具会根据其后缀自动编译C源程序,或连接目标代码和库。 但是,使用预编译的目标代码时,必须保证它们是独立地址代码(position independent code [PIC]), 使之能被动态地加载。如果使用GCC编译,则应该使用-fpic参数; 如果使用其他C编译器,则应该查阅其手册,为apxs寻找相应的编译参数。

Command is: man apxs

一般选项
-n modname它明确设置了-i(install)和-g (template generation)选项的模块名称。 对-g选项,它是必须的; 对-i选项,apxs工具会按文件名判断至少是推测出这个模块名称。
查询选项
-q查询某种apxs设置的信息。 query参数可以是下列一个或多个字串:CC, CFLAGS, CFLAGS_SHLIB, INCLUDEDIR, LD_SHLIB, LDFLAGS_SHLIB, LIBEXECDIR, LIBS_SHLIB, SBINDIR, SYSCONFDIR, TARGET.
这个参数用于手动查询某些设置。比如,要手动处理Apache的C头文件,可以在Makefile中使用
INC=-Iapxs -q INCLUDEDIR

配置选项

-S name=value此选项可以改变apxs的上述设置。
模板生成选项
-g此选项生成一个名为name的子目录(见选项-n)和其中的两个文件: 一个是名为mod_name.c的样板模块源程序, 可以用作建立你自己的模块的模板,或是学习使用apxs机制的良好开端; 另一个则是对应的Makefile,用于编译和安装此模块。
DSO编译选项
-c此选项表示需要执行编译操作。 它首先会编译C源程序(.c)files为对应的目标代码文件(.o), 然后,连接这些目标代码和files中其余的目标代码文件(.o and .a), 以生成动态共享对象dsofile。如果没有指定-o选项, 则此输出文件名由files中的第一个文件名推测得到, 所以,缺省时,它一般会是mod_name.so.-o dsofile明确指定所建立的动态共享对象的文件名。 如果没有明确指定,而且也不能从files文件列表中推测得到, 则其文件名将为mod_unknown.so。-D name=value此选项定义直接提交给编译器的,以增加用于编译的变量。-I incdir此选项定义直接提交给编译器的变量,以增加用于编译的你自己的头文件目录。-L libdir此选项定义直接提交给编译器的变量,以增加用于编译的你自己的库文件目录。-l libname此选项定义直接提交给编译器的变量,以增加用于编译的你自己的库文件。-Wc,compiler-flags此选项用于附加编译参数compiler-flags到编译命令中,以增加编译器特有的参数。-Wl,linker-flags此选项用于附加连接参数linker-flags到连接命令中,以增加连接器特有的参数。

DSO的安装和配置选项

-i此选项表示需要执行安装操作, 以安装一个或多个动态共享对象到服务器的modules目录中。-a此选项自动在httpd.conf文件中增加一个LoadModule行,以激活此模块,或者,如果此行已经存在,则启用之。-A与-a选项类似,但是它增加的LoadModule指令由一个井号前缀(#), 即,此模块已经准备就绪,但尚处于禁用状态。-e此选项表示需要执行编辑操作,它可以与-a和-A选项配合使用, 与-i操作类似,修改Apache的httpd.conf配置文件,但是并不安装此模块。

(有关Apache对DSO的支持的详细信息,可以阅读mod_so的文档[下面的“About mod_so”部分], 或者直接阅读源程序src/modules/standard/mod_so.c)
————————————————————————
About mod_so
Loading of executable code and modules into the server at start-up or restart time
Module Name: so_module
Source File: mod_so.c
(This is a Base module (always included) on Windows)
Apache 1.3 modules cannot be directly used with Apache 2.0 – the module must be modified to dynamically load or compile into Apache 2.0.
————————————————————————
LoadFile
The LoadFile directive links in the named object files or libraries when the server is started or restarted; this is used to load additional code which may be required for some module to work. Filename is either an absolute path or relative to ServerRoot.
For example:

LoadModule
The LoadModule directive links in the object file or library filename and adds the module structure named module to the list of active modules. Module is the name of the external variable of type module in the file, and is listed as the Module Identifier in the module documentation.
Example:

loads the named module from the modules subdirectory of the ServerRoot.
________________________
Ending。

打赏

1
说点什么

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Recent comment authors
  Subscribe  
提醒
trackback

[…] Sth. About Apache Apxs and mod_so […]