2234N/A<?
xml version="1.0" encoding="ISO-8859-1"?>
2234N/A XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2234N/A This file is generated from xml source: DO NOT EDIT 2234N/A XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2234N/A<
title>Support des objets dynamiques partag�s (DSO) - Serveur Apache HTTP</
title>
2234N/A<
body id="manual-page"><
div id="page-header">
2234N/A<
p class="apache">Serveur Apache HTTP Version 2.5</
p>
2234N/A<
p><
span>Langues Disponibles: </
span><
a href="/en/dso.html" hreflang="en" rel="alternate" title="English"> en </
a> |
2234N/A<
a href="/ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </
a> |
2234N/A<
a href="/ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </
a> |
2234N/A<
a href="/tr/dso.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </
a></
p>
2234N/A <
p>La conception modulaire du serveur HTTP Apache permet � l'administrateur
2234N/A de choisir les fonctionnalit�s � inclure dans le serveur en s�lectionnant
2234N/A un certain nombre de modules. Les modules seront compil�s en tant
2234N/A qu'Objets Dynamiques Partag�s (Dynamic Shared Objects ou DSOs)
2234N/A qui m�nent une existence s�par�e du fichier binaire principal
2899N/A m�me temps que le serveur, ou compil�s et ajout�s ult�rieurement via
2899N/A l'Outil des Extensions � Apache (Apache Extension Tool ou
4982N/A <
p>Les modules peuvent aussi �tre int�gr�s statiquement dans le
3817N/A <
p>Ce document d�crit l'utilisation des modules DSO ainsi que les dessous
2234N/A de leur fonctionnement.</
p>
2234N/A<
div id="quickview"><
ul id="toc"><
li><
img alt="" src="/images/down.gif" /> <
a href="#implementation">Impl�mentation</
a></
li>
2234N/A<
li><
img alt="" src="/images/down.gif" /> <
a href="#background">Les dessous du fonctionnement des DSO</
a></
li>
2234N/A<
li><
img alt="" src="/images/down.gif" /> <
a href="#advantages">Avantages et inconv�nients</
a></
li>
2234N/A</
ul><
ul class="seealso"><
li><
a href="#comments_section">Commentaires</
a></
li></
ul></
div>
2234N/A<
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
2234N/A<
h2><
a name="implementation" id="implementation">Impl�mentation</
a></
h2>
2234N/A<
table class="related"><
tr><
th>Modules Apparent�s</
th><
th>Directives Apparent�es</
th></
tr><
tr><
td><
ul><
li><
code class="module"><
a href="/mod/mod_so.html">mod_so</
a></
code></
li></
ul></
td><
td><
ul><
li><
code class="directive"><
a href="/mod/mod_so.html#loadmodule">LoadModule</
a></
code></
li></
ul></
td></
tr></
table>
4337N/A <
p>Le support DSO pour le chargement de modules individuels d'Apache
assur� par un module nomm� <
code class="module"><
a href="/mod/mod_so.html">mod_so</
a></
code> qui doit �tre compil�
statiquement dans le coeur d'Apache httpd. Il s'agit du seul module avec le
module <
code class="module"><
a href="/mod/core.html">core</
a></
code> � ne pas pouvoir �tre compil� en tant que
module DSO lui-m�me. Pratiquement tous les autres modules d'Apache httpd
distribu�s seront alors compil�s en tant que modules DSO. Une fois
compil� en tant que module DSO nomm� <
code>
mod_foo.so</
code>, un
module peut �tre charg� en m�moire au
d�marrage ou red�marrage du serveur � l'aide de
la directive <
code class="directive"><
a href="/mod/mod_so.html#loadmodule">LoadModule</
a></
code> du module
<
code class="module"><
a href="/mod/mod_so.html">mod_so</
a></
code>, plac�e
<
p>La compilation en mode DSO peut �tre d�sactiv�e pour certains
modules via l'option <
code>--enable-mods-static</
code> du script
<
p>Un utilitaire permet de simplifier la cr�ation de
fichiers DSO pour les modules d'Apache httpd
(particuli�rement pour les modules tiers) ; il s'agit du programme nomm�
eXtenSion</
dfn>). On peut l'utiliser pour construire des modules de type
DSO <
em>en dehors</
em> de l'arborescence des sources d'Apache httpd. L'id�e est
simple : � l'installation du serveur HTTP Apache, la proc�dure <
code>make install</
code>
du script <
code class="program"><
a href="/programs/configure.html">configure</
a></
code> installe les fichiers d'en-t�tes
d'Apache httpd et positionne, pour la plateforme de compilation, les drapeaux du compilateur et de
l'�diteur de liens � l'int�rieur du programme
<
code class="program"><
a href="/programs/apxs.html">apxs</
a></
code>, qui sera utilis� pour la construction de fichiers DSO.
Il est ainsi possible d'utiliser le programme <
code class="program"><
a href="/programs/apxs.html">apxs</
a></
code>
pour compiler ses sources de modules Apache httpd sans avoir besoin de
l'arborescence des sources de la distribution d'Apache, et sans avoir �
r�gler les drapeaux du compilateur et de l'�diteur de liens pour le support DSO.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="usage" id="usage">Mode d'emploi succinct</
a></
h2>
<
p>Afin que vous puissiez vous faire une id�e des fonctionnalit�s DSO
du serveur HTTP Apache
2.x, en voici un r�sum� court et concis :</
p>
<
p>Construire et installer un module Apache httpd <
em>faisant partie de la
distribution</
em>, par exemple <
code>
mod_foo.c</
code>,
en tant que module DSO <
code>
mod_foo.so</
code> :</
p>
<
div class="example"><
p><
code>
<
p>Configure le serveur HTTP Apache avec tous les modules
activ�s. Seul un jeu de modules de base sera charg� au
d�marrage du serveur. Vous pouvez modifier ce jeu de modules
charg�s au d�marrage en activant ou d�sactivant les directives <
code class="directive"><
a href="/mod/mod_so.html#loadmodule">LoadModule</
a></
code> correspondantes dans le
<
div class="example"><
p><
code>
<
p>L'argument <
code>most</
code> de l'option
<
code>--enable-modules</
code> indique que tous les modules
non-exp�rimentaux ou qui ne sont pas l� � titre d'exemple seront
<
p>Certains modules ne sont utilis�s que par les d�veloppeurs et
ne seront pas compil�s. Si vous voulez les utiliser, sp�cifiez
l'option <
em>all</
em>. Pour compiler tous les modules disponibles,
y compris les modules de d�veloppeurs, sp�cifiez l'option
<
em>reallyall</
em>. En outre, la directive <
code class="directive"><
a href="/mod/mod_so.html#loadmodule">LoadModule</
a></
code> peut �tre activ�e pour tous
les modules compil�s via l'option du script configure
<
code>--enable-load-all-modules</
code>.</
p>
<
div class="example"><
p><
code>
$ /
configure --enable-mods-shared=reallyall --enable-load-all-modules<
br />
Construire et installer un module Apache httpd <
em>tiers</
em>, par exemple
<
code>
mod_foo.c</
code>, en tant que module DSO
<
code>
mod_foo.so</
code> <
em>en dehors</
em> de l'arborescence des sources
d'Apache httpd � l'aide du programme <
code class="program"><
a href="/programs/apxs.html">apxs</
a></
code> :
<
div class="example"><
p><
code>
<
p>Dans tous les cas, une fois le module partag� compil�, vous devez
ajouter une directive <
code class="directive"><
a href="/mod/mod_so.html#loadmodule">LoadModule</
a></
code>
dans le fichier <
code>
httpd.conf</
code> pour qu'Apache httpd active le module.</
p>
pour plus de d�tails.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="background" id="background">Les dessous du fonctionnement des DSO</
a></
h2>
<
p>Les cl�nes modernes d'UNIX proposent un m�canisme
appel� �dition de liens et chargement dynamiques d'
<
em>Objets Dynamiques Partag�s</
em> (DSO), qui permet de construire un
morceau de programme dans un format sp�cial pour le rendre chargeable
� l'ex�cution dans l'espace d'adressage d'un programme ex�cutable.</
p>
<
p>Ce chargement peut s'effectuer de deux mani�res : automatiquement par
un programme syst�me appel� <
code>
ld.so</
code> quand un programme
ex�cutable est d�marr�, ou manuellement � partir du programme en cours
d'ex�cution via sa propre interface syst�me vers le chargeur Unix � l'aide
des appels syst�me <
code>dlopen()/dlsym()</
code>.</
p>
<
p>Dans la premi�re m�thode, les DSO sont en g�n�ral appel�s
<
em>biblioth�ques partag�es</
em> ou encore <
em>biblioth�ques DSO</
em>, et
poss�dent des noms du style
r�pertoire syst�me (en g�n�ral <
code>/
usr/
lib</
code>)
et le lien avec le programme ex�cutable est �tabli � la compilation en
ajoutant <
code>-lfoo</
code> � la commande de l'�diteur de liens. Les
r�f�rences � la biblioth�que sont ainsi cod�es en dur dans le fichier du
programme ex�cutable de fa�on � ce qu'au d�marrage du programme, le
chargeur Unix soit capable de localiser <
code>
libfoo.so</
code> dans
<
code>/
usr/
lib</
code>, dans des chemins cod�s en dur � l'aide d'options de
l'�diteur de liens comme <
code>-R</
code> ou dans des chemins d�finis par la
<
code>LD_LIBRARY_PATH</
code>. Le chargeur peut d�s lors r�soudre tous les symboles
(jusque l� non encore r�solus) du DSO dans le programme ex�cutable.</
p>
<
p>Les symboles du programme ex�cutable ne sont en g�n�ral pas
r�f�renc�s par le DSO (car c'est une biblioth�que de code � usage g�n�ral
et ainsi aucune r�solution suppl�mentaire n'est n�cessaire. De son c�t�,
le programme ex�cutable ne doit accomplir aucune action particuli�re
symboles du DSO car toutes les r�solutions sont effectu�es par le chargeur
Unix. En fait, le code permettant d'invoquer
<
code>
ld.so</
code> fait partie du code de d�marrage pour l'ex�cution qui
est li� dans tout programme ex�cutable non statiquement li�.
L'avantage du chargement dynamique du code d'une biblioth�que partag�e est
�vident : le code de la biblioth�que ne doit �tre stock� qu'une seule fois
dans une biblioth�que syst�me telle que <
code>
libc.so</
code>, ce qui permet
d'�conomiser de l'espace disque pour les autres programmes.</
p>
<
p>Dans la seconde m�thode, les DSO sont en g�n�ral appel�s <
em>objets
partag�s</
em> ou <
em>fichiers DSO</
em>, et peuvent �tre nomm�s avec
l'extension de son choix (bien que le nom conseill� soit du style
<
code>
foo.so</
code>). Ces fichiers r�sident en g�n�ral dans un r�pertoire
sp�cifique � un programme, et aucun lien n'est automatiquement �tabli avec
le programme ex�cutable dans lequel ils sont utilis�s.
Le programme ex�cutable charge manuellement le DSO � l'ex�cution dans son
espace d'adressage � l'aide de l'appel syst�me <
code>dlopen()</
code>.
A ce moment, aucune r�solution de symboles du DSO n'est effectu�e pour le
programme ex�cutable. Par contre le chargeur Unix
r�soud automatiquement tout symbole du DSO (non encore r�solu)
faisant partie de l'ensemble de symboles export� par le programme
ex�cutable et ses biblioth�ques DSO d�j� charg�es (et en particulier tous
les symboles de la biblioth�que � tout faire <
code>
libc.so</
code>).
De cette fa�on, le DSO prend connaissance de l'ensemble de symboles du
programme ex�cutable comme s'il avait �t� li� statiquement avec lui
<
p>Finalement, pour tirer profit de l'API des DSO, le programme ex�cutable
doit r�soudre certains symboles du DSO � l'aide de l'appel syst�me
<
code>dlsym()</
code> pour une utilisation ult�rieure dans les tables de
distribution, <
em>etc...</
em> En d'autres termes, le programme ex�cutable doit
r�soudre manuellement tous les symboles dont il a besoin pour pouvoir les
Avantage d'un tel m�canisme : les modules optionnels du programme n'ont pas
besoin d'�tre charg�s (et ne gaspillent donc pas de ressources m�moire)
tant qu'il ne sont pas n�cessaires au programme en question. Si n�cessaire,
ces modules peuvent �tre charg�s dynamiquement afin d'�tendre les
fonctionnalit�s de base du programme.</
p>
<
p>Bien que ce m�canisme DSO paraisse �vident, il comporte au moins une
�tape difficile : la r�solution des symboles depuis le programme ex�cutable
pour le DSO lorsqu'on utilise un DSO pour �tendre les fonctionnalit�s d'un
programme (la seconde m�thode). Pourquoi ? Parce que la "r�solution
inverse" des symboles DSO � partir du jeu de symboles du programme
ex�cutable d�pend de la conception de la biblioth�que (la biblioth�que n'a
aucune information sur le programme qui l'utilise) et n'est ni standardis�e
ni disponible sur toutes les plateformes. En pratique, les symboles globaux
du programme ex�cutable ne sont en g�n�ral pas r�export�s et donc
indisponibles pour l'utilisation dans un DSO. Trouver une m�thode pour
forcer l'�diteur de liens � exporter tous les symboles globaux est le
principal probl�me que l'on doit r�soudre lorsqu'on utilise un DSO pour
�tendre les fonctionnalit�s d'un programme au moment de son ex�cution.</
p>
<
p>L'approche des biblioth�ques partag�es est la plus courante, parce que
c'est dans cette optique que le m�canisme DSO a �t� con�u ; c'est cette
utilis�e par pratiquement tous les types de biblioth�ques que fournit le
syst�me d'exploitation.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="advantages" id="advantages">Avantages et inconv�nients</
a></
h2>
<
p>Les fonctionnalit�s ci-dessus bas�es sur les DSO pr�sentent les
<
li>Le paquetage du serveur est plus flexible � l'ex�cution car le
processus serveur peut �tre assembl� � l'ex�cution via la
directive <
code class="directive"><
a href="/mod/mod_so.html#loadmodule">LoadModule</
a></
code> du fichier de
configuration <
code>
httpd.conf</
code> plut�t que par des options du script
on peut ainsi ex�cuter diff�rentes instances du serveur
(standard et version SSL, version minimale et version dynamique
[mod_perl, mod_php], <
em>etc...</
em>) � partir d'une seule installation
<
li>Le paquetage du serveur peut �tre facilement �tendu avec des modules
tiers, m�me apr�s l'installation. Ceci pr�sente un gros
avantage pour les mainteneurs de paquetages destin�s aux distributions,
car ils peuvent cr�er un paquetage Apache httpd de base, et des paquetages
additionnels contenant des extensions telles que PHP, mod_perl, mod_fastcgi,
<
li>Une facilit� de prototypage des modules Apache httpd, car la paire
DSO/<
code class="program"><
a href="/programs/apxs.html">apxs</
a></
code> vous permet d'une part de travailler en
dehors de l'arborescence des sources d'Apache httpd, et d'autre part de n'avoir
besoin que de la commande <
code>apxs -i</
code>
suivie d'un <
code>apachectl restart</
code> pour introduire une nouvelle
version de votre module fra�chement d�velopp� dans le serveur HTTP Apache
en cours d'ex�cution.</
li>
<
p>Inconv�nients des DSO :</
p>
<
li>Le serveur est environ 20 % plus lent au d�marrage
� cause des r�solutions de symboles suppl�mentaires que le chargeur
Unix doit effectuer.</
li>
<
li>Le serveur est environ 5 % plus lent � l'ex�cution
sur certaines plates-formes, car le code ind�pendant de la position (PIC)
n�cessite parfois des manipulations compliqu�es en assembleur pour
l'adressage relatif qui ne sont pas toujours aussi rapides que celles
que permet l'adressage absolu.</
li>
<
li>Comme les modules DSO ne peuvent pas �tre li�s avec d'autres
biblioth�ques bas�es sur DSO (<
code>ld -lfoo</
code>) sur toutes les
(par exemple, les plates-formes bas�es sur
a.out ne fournissent en
g�n�ral pas cette fonctionnalit� alors que les plates-formes bas�es sur
ELF le font), vous ne pouvez pas utiliser le m�canisme DSO pour tous les
types de modules. Ou en d'autres termes, les modules compil�s comme
fichiers DSO sont contraints de n'utiliser que les symboles du coeur
d'Apache httpd, de la biblioth�que C
(<
code>libc</
code>) et toutes autres biblioth�ques statiques ou
dynamiques utilis�es par le coeur d'Apache httpd, ou d'archives statiques
(<
code>
libfoo.a</
code>) contenant du code ind�pendant de la
Il y a deux solutions pour utiliser un autre type de code : soit le
coeur d'Apache httpd contient d�j� lui-m�me une r�f�rence au code, soit vous
chargez le code vous-m�me via <
code>dlopen()</
code>.</
li>
<
p><
span>Langues Disponibles: </
span><
a href="/en/dso.html" hreflang="en" rel="alternate" title="English"> en </
a> |
<
a href="/fr/dso.html" title="Fran�ais"> fr </
a> |
<
a href="/ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </
a> |
<
a href="/ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </
a> |
<
a href="/tr/dso.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </
a></
p>
</
div><
div class="top"><
a href="#page-header"><
img src="/images/up.gif" alt="top" /></
a></
div><
div class="section"><
h2><
a id="comments_section" name="comments_section">Commentaires</
a></
h2><
div class="warning"><
strong>Notice:</
strong><
br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered
invalid/
off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <
a href="http://httpd.apache.org/lists.html">mailing lists</
a>.</
div>
var comments_shortname = 'httpd'; d.write('<div id="comments_thread"><\/div>'); d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); //--><!]]></
script></
div><
div id="footer">
if (typeof(prettyPrint) !== 'undefined') {