mod_so.html revision ba21774a1c24f90e586ca0f4e3e66dd66a8e7ca2
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<HTML>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<HEAD>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<TITLE>Apache module mod_so</TITLE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</HEAD>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<BODY
c55c68b6a3324172e9dc207926215845880b0f90vboxsync BGCOLOR="#FFFFFF"
c55c68b6a3324172e9dc207926215845880b0f90vboxsync TEXT="#000000"
c55c68b6a3324172e9dc207926215845880b0f90vboxsync LINK="#0000FF"
c55c68b6a3324172e9dc207926215845880b0f90vboxsync VLINK="#000080"
c55c68b6a3324172e9dc207926215845880b0f90vboxsync ALINK="#FF0000"
c55c68b6a3324172e9dc207926215845880b0f90vboxsync>
c55c68b6a3324172e9dc207926215845880b0f90vboxsync<!--#include virtual="header.html" -->
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<H1 ALIGN="CENTER">Module mod_so</H1>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<p>This module provides for loading of executable code and modules into the
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncserver at start-up or restart time.</p>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P><A
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncHREF="module-dict.html#Status"
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncREL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Status:</STRONG></A> Base (Windows); Optional (Unix)
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncHREF="module-dict.html#SourceFile"
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncREL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Source File:</STRONG></A> mod_so.c
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncHREF="module-dict.html#ModuleIdentifier"
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncREL="Help"
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync><STRONG>Module Identifier:</STRONG></A> so_module
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncHREF="module-dict.html#Compatibility"
ad27e1d5e48ca41245120c331cc88b50464813cevboxsyncREL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Compatibility:</STRONG></A> Available in Apache 1.3 and later.
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<H2>Summary</H2>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>On selected operating systems this module can be used to load modules
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncinto Apache at runtime via the <A HREF="/dso.html">Dynamic Shared
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncObject</A> (DSO) mechanism, rather than requiring a recompilation.
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncOn Unix, the loaded code typically comes from shared object files
59190ecd61435d19ba3515b876272aee7bd12298vboxsync(usually with <SAMP>.so</SAMP> extension), on Windows this may either
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncthe <SAMP>.so</SAMP> or <SAMP>.dll</SAMP> extension. This module is
59190ecd61435d19ba3515b876272aee7bd12298vboxsynconly available in Apache 1.3 and up.
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<p>In previous releases, the functionality of this module was provided
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncfor Unix by mod_dld, and for Windows by mod_dll. On Windows, mod_dll
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncwas used in beta release 1.3b1 through 1.3b5. mod_so combines these
59190ecd61435d19ba3515b876272aee7bd12298vboxsynctwo modules into a single module for all operating systems.
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P><STRONG> Warning: Apache 1.3 modules cannot be directly used with
59190ecd61435d19ba3515b876272aee7bd12298vboxsync Apache 2.0 - the module must be modified to dynamically load or
59190ecd61435d19ba3515b876272aee7bd12298vboxsync compile into Apache 2.0</STRONG>.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<H2>Directives</H2>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<UL>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<LI><A HREF="#loadfile">LoadFile</A>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<LI><A HREF="#loadmodule">LoadModule</A>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</UL>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<H2><A NAME="creating">Creating Loadable Modules for Windows</A></H2>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P><STRONG>Note: the module name format changed for Windows with Apache
59190ecd61435d19ba3515b876272aee7bd12298vboxsync 1.3.15 and 2.0 - the modules are now named as mod_foo.so</STRONG>.
59190ecd61435d19ba3515b876272aee7bd12298vboxsync While mod_so still loads modules with ApacheModuleFoo.dll names, the
59190ecd61435d19ba3515b876272aee7bd12298vboxsync new naming convention is preferred; if you are converting your loadable
59190ecd61435d19ba3515b876272aee7bd12298vboxsync module for 2.0, please fix the name to this 2.0 convention.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>The Apache module API is unchanged between the Unix and Windows
59190ecd61435d19ba3515b876272aee7bd12298vboxsync versions. Many modules will run on Windows with no or little change
59190ecd61435d19ba3515b876272aee7bd12298vboxsync from Unix, although others rely on aspects of the Unix architecture
59190ecd61435d19ba3515b876272aee7bd12298vboxsync which are not present in Windows, and will not work.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>When a module does work, it can be added to the server in one of two
59190ecd61435d19ba3515b876272aee7bd12298vboxsync ways. As with Unix, it can be compiled into the server. Because Apache
59190ecd61435d19ba3515b876272aee7bd12298vboxsync for Windows does not have the <CODE>Configure</CODE> program of Apache
59190ecd61435d19ba3515b876272aee7bd12298vboxsync for Unix, the module's source file must be added to the ApacheCore
59190ecd61435d19ba3515b876272aee7bd12298vboxsync project file, and its symbols must be added to the
59190ecd61435d19ba3515b876272aee7bd12298vboxsync <CODE>os\win32\modules.c</CODE> file.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>The second way is to compile the module as a DLL, a shared library
59190ecd61435d19ba3515b876272aee7bd12298vboxsync that can be loaded into the server at runtime, using the
59190ecd61435d19ba3515b876272aee7bd12298vboxsync <CODE><A HREF="#loadmodule">LoadModule</A></CODE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync directive. These module DLLs can be distributed and run on any Apache
59190ecd61435d19ba3515b876272aee7bd12298vboxsync for Windows installation, without recompilation of the server.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>To create a module DLL, a small change is necessary to the module's
59190ecd61435d19ba3515b876272aee7bd12298vboxsync source file: The module record must be exported from the DLL (which
59190ecd61435d19ba3515b876272aee7bd12298vboxsync will be created later; see below). To do this, add the <CODE
59190ecd61435d19ba3515b876272aee7bd12298vboxsync >AP_MODULE_DECLARE_DATA</CODE> (defined in the Apache header files)
59190ecd61435d19ba3515b876272aee7bd12298vboxsync to your module's module record definition. For example, if your module
59190ecd61435d19ba3515b876272aee7bd12298vboxsync has:</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<PRE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync module foo_module;
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</PRE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>Replace the above with:</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<PRE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync module AP_MODULE_DECLARE_DATA foo_module;
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</PRE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>Note that this will only be activated on Windows, so the module can
59190ecd61435d19ba3515b876272aee7bd12298vboxsync continue to be used, unchanged, with Unix if needed. Also, if you are
59190ecd61435d19ba3515b876272aee7bd12298vboxsync familiar with <CODE>.DEF</CODE> files, you can export the module
59190ecd61435d19ba3515b876272aee7bd12298vboxsync record with that method instead.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>Now, create a DLL containing your module. You will need to link this
59190ecd61435d19ba3515b876272aee7bd12298vboxsync against the libhttpd.lib export library that is created when the
59190ecd61435d19ba3515b876272aee7bd12298vboxsync libhttpd.dll shared library is compiled. You may also have to change
59190ecd61435d19ba3515b876272aee7bd12298vboxsync the compiler settings to ensure that the Apache header files are
59190ecd61435d19ba3515b876272aee7bd12298vboxsync correctly located. You can find this library in your server root's
59190ecd61435d19ba3515b876272aee7bd12298vboxsync libexec directory. It is best to grab an existing module .dsp file
59190ecd61435d19ba3515b876272aee7bd12298vboxsync from the tree to assure the build environment is configured correctly,
59190ecd61435d19ba3515b876272aee7bd12298vboxsync or alternately compare the compiler and link options to your .dsp.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>This should create a DLL version of your module. Now simply place it
59190ecd61435d19ba3515b876272aee7bd12298vboxsync in the <SAMP>modules</SAMP> directory of your server root, and use
59190ecd61435d19ba3515b876272aee7bd12298vboxsync the <CODE><A HREF="#loadmodule">LoadModule</A></CODE> directive to
59190ecd61435d19ba3515b876272aee7bd12298vboxsync load it.</P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<HR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<H2><A NAME="loadfile">LoadFile</A> directive</H2>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<!--%plaintext &lt;?INDEX {\tt LoadFile} directive&gt; -->
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Syntax"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Syntax:</STRONG></A> LoadFile <EM>filename</em>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync [<em>filename</em>] ...<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Context"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Context:</STRONG></A> server config<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Status"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Status:</STRONG></A> Base<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Module"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Module:</STRONG></A> mod_so<P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncThe LoadFile directive links in the named object files or libraries
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncwhen the server is started or restarted; this is used to load
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncadditional code which may be required for some module to
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncwork. <EM>Filename</EM> is either and absolute path or relative to <A
ad27e1d5e48ca41245120c331cc88b50464813cevboxsyncHREF="core.html#serverroot">ServerRoot</A>.<P><HR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<H2><A NAME="loadmodule">LoadModule</A> directive</H2>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<!--%plaintext &lt;?INDEX {\tt LoadModule} directive&gt; -->
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Syntax"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Syntax:</STRONG></A> LoadModule <EM>module filename</EM><BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Context"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Context:</STRONG></A> server config<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Status"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Status:</STRONG></A> Base<BR>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<A
59190ecd61435d19ba3515b876272aee7bd12298vboxsync HREF="directive-dict.html#Module"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync REL="Help"
59190ecd61435d19ba3515b876272aee7bd12298vboxsync><STRONG>Module:</STRONG></A> mod_so<P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncThe LoadModule directive links in the object file or library
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<EM>filename</EM> and adds the module structure named <EM>module</EM>
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncto the list of active modules. <EM>Module</EM> is the name of the
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncexternal variable of type <CODE>module</CODE> in the file, and is
59190ecd61435d19ba3515b876272aee7bd12298vboxsynclisted as the <a href="module-dict.html#ModuleIdentifier">Module
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncIdentifier</a> in the module documentation. Example:
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<BLOCKQUOTE><CODE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsyncLoadModule status_module modules/mod_status.so
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</CODE></BLOCKQUOTE>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<P>loads the named module from the modules subdirectory of the
59190ecd61435d19ba3515b876272aee7bd12298vboxsync ServerRoot.<P>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync<!--#include virtual="footer.html" -->
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</BODY>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync</HTML>
59190ecd61435d19ba3515b876272aee7bd12298vboxsync
59190ecd61435d19ba3515b876272aee7bd12298vboxsync