1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Support des objets dynamiques partag�s (DSO) - Serveur Apache HTTP</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
<script src="./style/scripts/prettify.js" type="text/javascript">
</script>
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
<p class="apache">Serveur Apache HTTP Version 2.5</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>Support des objets dynamiques partag�s (DSO)</h1>
<div class="toplang">
<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>
<p>La conception modulaire du serveur HTTP Apache permet � l'administrateur
de choisir les fonctionnalit�s � inclure dans le serveur en s�lectionnant
un certain nombre de modules. Les modules seront compil�s en tant
qu'Objets Dynamiques Partag�s (Dynamic Shared Objects ou DSOs)
qui m�nent une existence s�par�e du fichier binaire principal
<code class="program"><a href="./programs/httpd.html">httpd</a></code>. Les modules DSO peuvent �tre compil�s en
m�me temps que le serveur, ou compil�s et ajout�s ult�rieurement via
l'Outil des Extensions � Apache (Apache Extension Tool ou
<code class="program"><a href="./programs/apxs.html">apxs</a></code>).</p>
<p>Les modules peuvent aussi �tre int�gr�s statiquement dans le
binaire <code class="program"><a href="./programs/httpd.html">httpd</a></code> lors de la compilation de ce
dernier.</p>
<p>Ce document d�crit l'utilisation des modules DSO ainsi que les dessous
de leur fonctionnement.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Impl�mentation</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#usage">Mode d'emploi succinct</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#background">Les dessous du fonctionnement des DSO</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#advantages">Avantages et inconv�nients</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="implementation" id="implementation">Impl�mentation</a></h2>
<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>
<p>Le support DSO pour le chargement de modules individuels d'Apache
httpd est
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
dans votre fichier <code>httpd.conf</code>.</p>
<p>La compilation en mode DSO peut �tre d�sactiv�e pour certains
modules via l'option <code>--enable-mods-static</code> du script
<code class="program"><a href="./programs/configure.html">configure</a></code>, comme expliqu� dans la <a href="install.html">Documentation sur l'installation</a>.</p>
<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�
<code class="program"><a href="./programs/apxs.html">apxs</a></code> (<dfn>APache
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>
<div class="section">
<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>
<ol>
<li>
<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>
$ ./configure --prefix=/chemin/vers/installation --enable-foo<br />
$ make install
</code></p></div>
</li>
<li>
<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
fichier <code>httpd.conf</code>.</p>
<div class="example"><p><code>
$ ./configure --enable-mods-shared=all<br />
$ make install
</code></p></div>
<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
compil�s.</p>
</li>
<li>
<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 />
$ make install
</code></p></div>
</li>
<li>
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>
$ cd /chemin/vers/module_tiers<br />
$ apxs -cia mod_foo.c
</code></p></div>
</li>
</ol>
<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>
<p>Voir la <a href="programs/apxs.html">documentation sur apxs</a>
pour plus de d�tails.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<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
<code>libfoo.so</code> ou <code>libfoo.so.1.2</code>. Ils r�sident dans un
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
variable d'environnement
<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 r�utilisable),
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
pour utiliser les
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
auparavant.</p>
<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
utiliser.
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
approche qui est ainsi
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>
<div class="section">
<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
avantages suivants :</p>
<ul>
<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
<code class="program"><a href="./programs/configure.html">configure</a></code> � la compilation. Par exemple,
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
d'Apache httpd.</li>
<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,
<em>etc...</em></li>
<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>
</ul>
<p>Inconv�nients des DSO :</p>
<ul>
<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
plates-formes
(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
position (PIC).
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>
</ul>
</div></div>
<div class="bottomlang">
<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>This section is experimental!</strong><br />Comments placed here should not be expected
to last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div><div id="disqus_thread" /><script type="text/javascript"><!--//--><![CDATA[//><!--
var lang = 'fr';
var disqus_shortname = 'httpd';
var disqus_identifier = window.location.href.replace(/(current|trunk)/, "2.4").replace(/\/[a-z]{2}\//, "/").replace(window.location.protocol, "http:") + '.' + lang;
if (disqus_identifier.indexOf("httpd.apache.org") != -1) {
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = window.location.protocol + '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
} else {
var text = document.createTextNode("Comments have been disabled for offline viewing.");
document.getElementById('disqus_thread').appendChild(text);
}
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== undefined) {
prettyPrint();
}
//--><!]]></script>
</body></html>
|