Apache HTTP Server �汾2.2
Apache HTTP��������һ��ģ�黯�����������Ա����ͨ��ѡ��������а�����ģ����й���������ģ������ڱ���ʱ����̬������httpd
�������ļ���Ҳ���Ա���ɶ�����httpd
�������ļ��Ķ�̬�������(DSO)��DSOģ������������һ����룬Ҳ������Apache��չ����(apxs
)�������롣
���IJ������ʹ��DSOģ�鼰�乤��ԭ��
���ģ�� | ���ָ�� |
---|---|
Apache�Զ���ģ���DSO֧���ǽ�����ֻ�ܱ���̬�����Apache���ĵ�mod_so
����֮�ϵģ�����core
����Ψһ������ΪDSO���ڵ�ģ�飬�����������ѷ�����Apacheģ�飬������ͨ����װ�ĵ��в����е�����ѡ��
--enable-module=shared
�������ر����DSO��ʹ֮��Ч��һ��������Ϊmod_foo.so
��DSOģ�飬������httpd.conf
��ʹ��mod_so
��LoadModule
ָ��ڷ�������������������ʱ�����ء�
���ṩ��֧�ֳ���apxs
(APache
eXtenSion)������ApacheԴ������֮���������DSO��ģ�飬�Ӷ�����Apache DSOģ��Ľ������̡���ԭ��ܼ���װApacheʱ��configure
�� make install
����ᰲװApache Cͷ�ļ��������������ض�ƽ̨�ı���������������������apxs
����ʹ�û���������Apache�ķ���Դ������������ģ��Դ���룬�����ı�֧��DSO�ı��������������IJ�����
Apache2.0 ��DSO���ܼ�Ҫ˵����
mod_foo.c
Ϊmod_foo.so
��DSOģ�飺
$ ./configure --prefix=/path/to/install --enable-foo=shared
$ make install
mod_foo.c
Ϊmod_foo.so
��DSOģ�飺
$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared
$ make install
$ ./configure --enable-so
$ make install
apxs
��ApacheԴ�����������벢��װ������ģ�飬�������mod_foo.c
Ϊmod_foo.so
��DSOģ�飺
$ cd /path/to/3rdparty
$ apxs -c mod_foo.c
$ apxs -i -a -n foo mod_foo.la
����ģ�������Ϻ�����httpd.conf
����LoadModule
ָ��ʹApache���ø�ģ�顣
�ִ�����Unixϵͳ����һ�ֽ���̬�������(DSO)�Ķ�̬����/���ص�����Ļ��ƣ��Ӷ�����������ʱ������������ʽ�Ĵ�����ص�һ����ִ�г���ĵ�ַ�ռ䡣
���صķ���ͨ�������֣���һ���ڿ�ִ���ļ�����ʱ��ϵͳ����ld.so
�Զ����أ�������ڿ�ִ�г������ֶ���ͨ��Unix��������ϵͳ�ӿ�ִ��ϵͳ����dlopen()/dlsym()
���м��ء�
����һ�ַ�����DSOͨ������Ϊ�����(shared libraries)����DSO��(DSO libraries)��ʹ��libfoo.so
��libfoo.so.1.2
���ļ������洢��ϵͳĿ¼��(ͨ����/usr/lib
)�����ڱ��밲װʱʹ������������ -lfoo
������ָ���ִ�г�������ӡ�ͨ���������������� -R
����������LD_LIBRARY_PATH
������Ӳ�����˿�ִ���ļ���·����ʹUnix�������ܹ��ڿ�ִ�г�������ʱ��λ��λ��/usr/lib
Ŀ¼�е�libfoo.so
���Խ�����ִ���ļ�����δ������λ��DSO�еķ��š�
ͨ����DSO�������ÿ�ִ���ļ��еķ���(��Ϊ����ͨ�ô���Ŀ����ÿ�)��Ҳ�����к�̵Ľ�����������ִ���ļ������Լ����κζ�����ʹ��DSO�еķ��ţ�����ȫ��Unix����������(��ʵ�ϣ�����ld.so
�Ĵ����DZ�����ÿ����ִ���ļ��ķǾ�̬����ʱ���������һ����)����̬���ع����������ŵ������Եģ�ֻ��Ҫ��ϵͳ��libc.so
�д洢һ�ο���룬�Ӷ�Ϊÿ�������ʡ�˴��̴洢�ռ䡣
���ڶ��ַ�����DSOͨ������Ϊ�������(shared
objects)��DSO�ļ�(DSO files)������ʹ���κ��ļ���(���ǹ淶��������foo.so
)�����洢�ڳ����ض���Ŀ¼�У�Ҳ�����Զ�����ָ�������õĿ�ִ���ļ������ӣ����ɿ�ִ���ļ�������ʱ�Լ�����dlopen()
������DSO�����ַ�ռ䣬ͬʱҲ�������Ϊ��ִ���ļ�����DSO�з��ŵIJ�����Unix����������ݿ�ִ�г����������ű���Ѿ����ص�DSO���Զ�����DSO����δ�����ķ���(�������������ڵ�libc.so
�еķ���)�����DSO�ͻ���˿�ִ�г���ķ�����Ϣ���ͺ����DZ���̬����һ����
���Ϊ������DSO API���ŵ㣬��ִ�г��������dlsym()
����DSO�еķ��ţ��Ա��Ժ�������ָ�ɱ��ȵ���ʹ�á�Ҳ����˵����ִ�г�������Լ�����������ķ��š����ֻ��Ƶ��ŵ����������ؿ�ѡ�ij�����ֱ��������Ҫ��ʱ��ű���̬�ؼ���(Ҳ�Ͳ���Ҫ�ڴ濪��)������չ����Ĺ��ܡ�
��Ȼ����DSO���ƿ��ƺ�ֱ�ӣ���������һ���ѵ㣬��������DSO��չ������(�ڶ��ַ���)ʱΪDSO�Կ�ִ�г����з��ŵĽ��н�����������Ϊ��"�������"��ִ�г����е�DSO���������б�ƽ̨��������ƶ���ì�ܵ�(�ⲻ��֪��ʲô�����ʹ����)��ʵ��Ӧ���У���ִ���ļ��е�ȫ�ַ���ͨ������������ģ���˲���ΪDSO���á�����������ʱ��DSO����չ�����ܣ��ͱ����ҵ�ǿ���������������ȫ�ַ��ŵķ�����
�������һ�ֵ��͵Ľ����������Ϊ������DSO���ƣ�����Ϊ����ϵͳ���ṩ�ļ����������͵Ŀ���ʹ�á���һ���棬ʹ�ù��������������Ϊ��չ�书�������õķ�����
��ֹ��1998�ֻ꣬�������������ʹ��DSO����������ʱ��չ�书�ܣ����� Perl 5(ͨ����XS���ƺ�DynaLoaderģ��)��Netscape Server�ȡ���1.3�汾��ʼ��ApacheҲ������У���ΪApache�Ѿ����˻���ָ�ɱ�(dispatch-list-based)�ķ����������ⲿģ�鵽Apache�ĺ��ġ�����ApacheҲ�͵�Ȼ��������ʱ��DSO��������ģ�顣
��������DSO�Ĺ����������ŵ㣺
httpd.conf
���������LoadModule
�����У��������ڱ�����ʹ������ѡ��
�����У�����Եø������磬ֻ��Ҫ��װһ��Apache���Ϳ������ж����ͬ�ķ�����ʵ��(���&SSL�汾��Ũ��&���ܼ�ǿ�汾[mod_perl��PHP])��apxs
����������ApacheԴ������������Ҫһ�� apxs -i
��һ�� apachectl restart
����Ϳ��Ѹտ�������ģ�����뵽�����е�Apache��������DSO������ȱ�㣺
ld -lfoo
)�����磬����a.out��ƽ̨ͨ�����ṩ�˹��ܣ�������ELF��ƽ̨���ṩ�����DSO���Ʋ����ܱ������������͵�ģ�顣���߿�������˵������ΪDSO�ļ���ģ��ֻ��ʹ����Apache���ġ�C��(libc
)��Apache�������õ�����������̬��̬�Ŀ⡢���ж���λ�ô���ľ�̬��(libfoo.a
)���ṩ�ķ��š���Ҫʹ���������룬��ֻ��ȷ��Apache���ı�������Դ˴�������ã������Լ���dlopen()
�����ش˴��롣