mirror of
https://github.com/apache/httpd.git
synced 2025-05-19 02:21:09 +03:00
Submitted by: Shane Owenby git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@82852 13f79535-47bb-0310-9956-ffa450edef68
165 lines
5.6 KiB
HTML
165 lines
5.6 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>Apache module mod_so</TITLE>
|
|
</HEAD>
|
|
|
|
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
|
|
<BODY
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#000080"
|
|
ALINK="#FF0000"
|
|
>
|
|
<!--#include virtual="header.html" -->
|
|
<H1 ALIGN="CENTER">Module mod_so</H1>
|
|
|
|
This module is contained in the <CODE>mod_so.c</CODE> file. It is
|
|
compiled in by default on Windows and is not compiled in by default on
|
|
Unix. It provides for loading of executable code and modules into the
|
|
server at start-up or restart time. On Unix, the loaded code typically
|
|
comes from shared object files (usually with <SAMP>.so</SAMP>
|
|
extension), whilst on Windows this module loads <SAMP>DLL</SAMP>
|
|
files. This module is only available in Apache 1.3 and up.
|
|
|
|
<P>
|
|
|
|
In previous releases, the functionality of this module was provided
|
|
for Unix by mod_dld, and for Windows by mod_dll. On Windows, mod_dll
|
|
was used in beta release 1.3b1 through 1.3b5. mod_so combines these
|
|
two modules into a single module for all operating systems.
|
|
|
|
<H2>Summary</H2>
|
|
|
|
This is an experimental module. On selected operating systems it can be used
|
|
to load modules into Apache at runtime via the <A HREF="../dso.html">Dynamic
|
|
Shared Object</A> (DSO) mechanism, rather than requiring a recompilation.
|
|
|
|
<H2>Directives</H2>
|
|
<UL>
|
|
<LI><A HREF="#loadfile">LoadFile</A>
|
|
<LI><A HREF="#loadmodule">LoadModule</A>
|
|
</UL>
|
|
<HR>
|
|
|
|
|
|
<H2><A NAME="loadfile">LoadFile</A></H2>
|
|
<!--%plaintext <?INDEX {\tt LoadFile} directive> -->
|
|
<A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> LoadFile <EM>filename filename ...</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Context"
|
|
REL="Help"
|
|
><STRONG>Context:</STRONG></A> server config<BR>
|
|
<A
|
|
HREF="directive-dict.html#Status"
|
|
REL="Help"
|
|
><STRONG>Status:</STRONG></A> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mod_so<P>
|
|
|
|
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. <EM>Filename</EM> is either and absolute path or relative to <A
|
|
HREF="core.html#serverroot">ServerRoot</A>.<P><HR>
|
|
|
|
<H2><A NAME="loadmodule">LoadModule</A></H2>
|
|
<!--%plaintext <?INDEX {\tt LoadModule} directive> -->
|
|
<A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> LoadModule <EM>module filename</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Context"
|
|
REL="Help"
|
|
><STRONG>Context:</STRONG></A> server config<BR>
|
|
<A
|
|
HREF="directive-dict.html#Status"
|
|
REL="Help"
|
|
><STRONG>Status:</STRONG></A> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mod_so<P>
|
|
|
|
The LoadModule directive links in the object file or library <EM>filename</EM>
|
|
and adds the module structure named <EM>module</EM> to the list of active
|
|
modules. <EM>Module</EM> is the name of the external variable of type
|
|
<CODE>module</CODE> in the file. Example (Unix):
|
|
<BLOCKQUOTE><CODE>
|
|
LoadModule status_module modules/mod_status.so
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
<P>
|
|
|
|
Example (Windows):
|
|
<BLOCKQUOTE><CODE>
|
|
LoadModule status_module modules/ApacheModuleStatus.dll<BR>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
loads the named module from the modules subdirectory of the
|
|
ServerRoot.<P>
|
|
|
|
<HR>
|
|
|
|
<H2><A NAME="creating">Creating DLL Modules for Windows</A></H2>
|
|
|
|
<P>The Apache module API is unchanged between the Unix and Windows
|
|
versions. Many modules will run on Windows with no or little change
|
|
from Unix, although others rely on aspects of the Unix architecture
|
|
which are not present in Windows, and will not work.</P>
|
|
|
|
<P>When a module does work, it can be added to the server in one of two
|
|
ways. As with Unix, it can be compiled into the server. Because Apache
|
|
for Windows does not have the <CODE>Configure</CODE> program of Apache
|
|
for Unix, the module's source file must be added to the ApacheCore
|
|
project file, and its symbols must be added to the
|
|
<CODE>os\win32\modules.c</CODE> file.</P>
|
|
|
|
<P>The second way is to compile the module as a DLL, a shared library
|
|
that can be loaded into the server at runtime, using the
|
|
<CODE><A HREF="#loadmodule">LoadModule</A></CODE>
|
|
directive. These module DLLs can be distributed and run on any Apache
|
|
for Windows installation, without recompilation of the server.</P>
|
|
|
|
<P>To create a module DLL, a small change is necessary to the module's
|
|
source file: The module record must be exported from the DLL (which
|
|
will be created later; see below). To do this, add the
|
|
<CODE>MODULE_VAR_EXPORT</CODE> (defined in the Apache header files) to
|
|
your module's module record definition. For example, if your module
|
|
has:</P>
|
|
<PRE>
|
|
module foo_module;
|
|
</PRE>
|
|
<P>Replace the above with:</P>
|
|
<PRE>
|
|
module MODULE_VAR_EXPORT foo_module;
|
|
</PRE>
|
|
<P>Note that this will only be activated on Windows, so the module can
|
|
continue to be used, unchanged, with Unix if needed. Also, if you are
|
|
familiar with <CODE>.DEF</CODE> files, you can export the module
|
|
record with that method instead.</P>
|
|
|
|
<P>Now, create a DLL containing your module. You will need to link this
|
|
against the ApacheCore.lib export library that is created when the
|
|
ApacheCore.dll shared library is compiled. You may also have to change
|
|
the compiler settings to ensure that the Apache header files are
|
|
correctly located.</P>
|
|
|
|
<P>This should create a DLL version of your module. Now simply place it
|
|
in the <SAMP>modules</SAMP> directory of your server root, and use
|
|
the <CODE><A HREF="#loadmodule">LoadModule</A></CODE> directive to
|
|
load it.</P>
|
|
|
|
|
|
<!--#include virtual="footer.html" -->
|
|
</BODY>
|
|
</HTML>
|
|
|