Apache HTTP Server �汾2.2
apxs
��һ��ΪApache HTTP����������Ͱ�װ��չģ��Ĺ��ߣ����ڱ���һ������Դ�����Ŀ������ļ�Ϊ��̬�������ʹ֮��������mod_so
�ṩ��LoadModule
ָ��������ʱ���ص�Apache�������С�
��ˣ�Ҫʹ�������չ���ƣ����ƽ̨����֧��DSO���ԣ�����Apache httpd
�����ڽ���mod_so
ģ�顣apxs
�������Զ�̽���Ƿ�߱���������������Ҳ�����Լ�����������ֶ�̽�⣺
$ httpd -l
�����������б���Ӧ����mod_so
ģ�顣���������Щ�������Ѿ߱�������Ժ����ؽ���apxs
��װ���Լ���DSOģ������չApache�������Ĺ��ܣ�
$ 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
$ _
���еIJ���files�������κ�CԴ�����ļ�(.c)��Ŀ������ļ�(.o)��������һ����(.a)��apxs
�����������Զ�����CԴ�����������Ŀ�����Ϳ⡣���ǣ�ʹ��Ԥ�����Ŀ�����ʱ�����뱣֤�����ǵ�ַ��������(PIC)��ʹ֮�ܱ���̬�ؼ��ء����ʹ��GCC���룬��Ӧ��ʹ�� -fpic
���������ʹ������C����������Ӧ�ò������ֲᣬΪapxs
ʹ����Ӧ�ı��������
�й�Apache��DSO��֧�ֵ���ϸ��Ϣ�������Ķ�mod_so
�ĵ�������ֱ���Ķ�src/modules/standard/mod_so.c
Դ����
apxs -g
[ -S name=value ]
-n modname
apxs -q
[ -S name=value ]
query ...
apxs -c
[ -S name=value ]
[ -o dsofile ]
[ -I incdir ]
[ -D name=value ]
[ -L libdir ]
[ -l libname ]
[ -Wc,compiler-flags ]
[ -Wl,linker-flags ]
files ...
apxs -i
[ -S name=value ]
[ -n modname ]
[ -a ]
[ -A ]
dso-file ...
apxs -e
[ -S name=value ]
[ -n modname ]
[ -a ]
[ -A ]
dso-file ...
-n modname
-i
(��װ)�� -g
(ģ������)ѡ���ģ�����ơ��� -g
ѡ����DZ���ģ��� -i
ѡ�apxs
�������Դ�����жϣ���(��ʧ�ܵ������)���ļ����Ʋ�����ģ������ơ�-q
apxs
���õ���Ϣ����ѡ���query��������������һ�������ַ�����CC
, CFLAGS
, CFLAGS_SHLIB
, INCLUDEDIR
, LD_SHLIB
, LDFLAGS_SHLIB
, LIBEXECDIR
, LIBS_SHLIB
, SBINDIR
, SYSCONFDIR
, TARGET
��
������������ֶ���ѯijЩ���á����磬Ҫ�ֶ�����Apache��Cͷ�ļ���������Makefile��ʹ�ã�
INC=-I`apxs -q INCLUDEDIR`
-S name=value
-g
-n
)�����е������ļ���һ������Ϊmod_name.c
������ģ��Դ�����������������Լ���ģ�飬����ѧϰʹ��apxs���Ƶ����ÿ��ˣ���һ�����Ƕ�Ӧ��Makefile
�����ڱ���Ͱ�װ��ģ�顣-c
-o
ѡ��������ļ�����files�еĵ�һ���ļ����Ʋ�õ���Ҳ����Ĭ��Ϊmod_name.so
��-o dsofile
mod_unknown.so
��-D name=value
-I incdir
-L libdir
-l libname
-Wc,compiler-flags
libtool --mode=compile
�и���compiler-flags �������ӱ��������е�ѡ�-Wl,linker-flags
libtool --mode=link
�и���linker-flags �����������������е�ѡ�-i
-a
LoadModule
�е�httpd.conf
�ļ��У��Լ����ģ�飬���ߣ���������Ѿ����ڣ�������֮��-A
-a
ѡ�����ƣ����������ӵ�LoadModule
������һ������ǰ(#
)������ģ���Ѿ�����������δ���á�-e
-a
�� -A
ѡ�����ʹ�ã��� -i
�������ƣ���Apache��httpd.conf
�ļ������Dz�����װ��ģ�顣������һ����չApache���ܵ�ģ��mod_foo.c
��ʹ������������Խ�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
�����Զ����иò�������װ�˹������"modules"Ŀ¼��������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
Ҫ���ٲ���apxs���ƣ����Խ���һ��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
$ _