This file is indexed.

/usr/share/doc/ubuntu-packaging-guide-html-fr/libraries.html is in ubuntu-packaging-guide-html-fr 0.3.6.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>10. Bibliothèques partagées &mdash; Ubuntu Packaging Guide</title>
    <link rel="shortcut icon" href="./_static/images/favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" href="./_static/reset.css" type="text/css" />
    <link rel="stylesheet" href="./_static/960.css" type="text/css" />
    <link rel="stylesheet" href="./_static/base.css" type="text/css" />
    <link rel="stylesheet" href="./_static/home.css" type="text/css" />
    <link rel="stylesheet" href="./_static/pygments.css" type="text/css" />
    <link rel="stylesheet" href="./_static/guide.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '0.3.6',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="./_static/jquery.js"></script>
    <script type="text/javascript" src="./_static/underscore.js"></script>
    <script type="text/javascript" src="./_static/doctools.js"></script>
    <script type="text/javascript" src="./_static/translations.js"></script>
    
    <script type="text/javascript" src="./_static/main.js"></script>
    <link rel="top" title="Ubuntu Packaging Guide" href="./index.html" />
    <link rel="next" title="11. Rétroportage de mises à jour logicielles" href="backports.html" />
    <link rel="prev" title="9. Réparation de paquets FTBFS" href="fixing-ftbfs.html" /> 
  </head>
  <body class="home">
  <a name="top"></a>

<div class="header-navigation">
    <div>
      <nav role="navigation">
        <ul>
          <li class="page_item current_page_item"><a title="Contenu" href="index.html">Contenu</a>
          <li>
            <form id="form-search" method="get" action="search.html">
              <fieldset>
                <input id="input-search" type="text" name="q" value="Search" />
              </fieldset>
            </form>
          </li>
        </ul>
      </nav>
      <a class="logo-ubuntu" href="http://packaging.ubuntu.com/">
        <img src="./_static/images/logo-ubuntu.png" width="119" height="27" alt="Ubuntu logo" />
      </a>
      <a href="http://packaging.ubuntu.com/"><h2>Packaging Guide</h2></a>
    </div>
  </div>
<div class="header-content">
    <div class="clearfix">
  <div class="header-navigation-secondary">
    <div>
          <nav role="navigation">
            <ul class="clearfix">
	        <li class="page_item"><a style="margin-right: 10px" 
	        href="backports.html" title="11. Rétroportage de mises à jour logicielles"
	        accesskey="N">suivant</a></li>
	        <li class="page_item"><a  
	        href="fixing-ftbfs.html" title="9. Réparation de paquets FTBFS"
	        accesskey="P">précédent</a></li>
        <li class="page_item"><a class="sub-nav-item" href="index.html">Ubuntu Packaging Guide  &raquo;</a></li> 
      </ul>
    </nav>
  </div>
</div>
</div>
</div>
  
<div id="content" class="body container_12">
  <div class="grid_12">  

     <!--<section id="main-section">-->

    <div class="grid_9 alpha">
		
    
  <div class="section" id="shared-libraries">
<h1>10. Bibliothèques partagées<a class="headerlink" href="#shared-libraries" title="Lien permanent vers ce titre"></a></h1>
<p>Les bibliothèques partagées sont du code compilé destiné à être partagé entre plusieurs différents programmes. Ils sont distribués en tant que fichiers <tt class="docutils literal"><span class="pre">.so</span></tt> dans <tt class="docutils literal"><span class="pre">/usr/lib/</span></tt>.</p>
<p>Une bibliothèque exporte des symboles qui sont les versions compilées de fonctions, de classes et de variables. Une bibliothèque possède ce qui s&#8217;appelle un SONAME comprenant un numéro de version. Cette version de SONAME ne correspond pas nécessairement au numéro de version publique. Un programme est compilé avec une version SONAME donnée de la bibliothèque. Si l&#8217;un des symboles est retiré ou modifié, alors le numéro de version doit être changé, ce qui oblige la recompilation de tous les paquets utilisant cette bibliothèque avec la nouvelle version. Les numéros de version sont généralement fixés par l&#8217;amont et nous les suivons dans nos noms de paquets binaires à l&#8217;aide d&#8217;un nombre ABI, mais parfois les amonts n&#8217;utilisent pas de numéros logiques de version et les empaqueteurs doivent conserver des numéros de version séparés.</p>
<p>Les bibliothèques sont généralement distribuées par l&#8217;amont sous forme de versions autonomes. Parfois, elles sont distribuées comme partie d&#8217;un programme. Dans ce cas, elles peuvent être incluses dans le paquet binaire avec le programme (c&#8217;est ce qu&#8217;on appelle le regroupement) lorsqu&#8217;il n&#8217;est pas prévu que d&#8217;autres programmes utilisent la bibliothèque. Le plus souvent, elles sont divisées en plusieurs paquets binaires séparés.</p>
<p>Les bibliothèques elles-mêmes sont mises dans un paquet binaire nommé <tt class="docutils literal"><span class="pre">libfoo1</span></tt><tt class="docutils literal"><span class="pre">foo</span></tt> est le nom de la bibliothèque et <tt class="docutils literal"><span class="pre">1</span></tt> la version de SONAME. Les fichiers de développement issus du paquet, tels que les fichiers d&#8217;en-tête, nécessaires pour compiler des programmes avec la bibliothèque sont placés dans un paquet appelé <tt class="docutils literal"><span class="pre">libfoo-dev</span></tt>.</p>
<div class="section" id="an-example">
<h2>10.1. Un exemple<a class="headerlink" href="#an-example" title="Lien permanent vers ce titre"></a></h2>
<p>Nous allons utiliser libnova comme exemple&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ bzr branch ubuntu:trusty/libnova
$ sudo apt-get install libnova-dev
</pre></div>
</div>
<p>Pour trouver le SONAME de la bibliothèque, lancez&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ readelf -a /usr/lib/libnova-0.12.so.2 | grep SONAME
</pre></div>
</div>
<p>Le SONAME est <tt class="docutils literal"><span class="pre">libnova-0.12.so.2</span></tt>, qui correspond au nom du fichier (généralement c&#8217;est le cas, mais pas toujours). Ici, l&#8217;amont a mis le numéro de version comme partie du SONAME et lui a donné <tt class="docutils literal"><span class="pre">2</span></tt> comme version d&#8217;ABI. Les noms de paquets de bibliothèque devraient suivre le SONAME de la bibliothèque les contenant. Le paquet binaire de bibliothèque s&#8217;appelle <tt class="docutils literal"><span class="pre">libnova-0.12-2</span></tt>, où <tt class="docutils literal"><span class="pre">libnova-0.12</span></tt> est le nom de la bibliothèque et <tt class="docutils literal"><span class="pre">2</span></tt> est notre ABI.</p>
<p>Si l&#8217;amont apporte des modifications incompatibles avec leur bibliothèque, il devra revoir la version de SONAME et nous devrons renommer notre bibliothèque. Tous les autres paquets utilisant notre paquet de  bibliothèque devront être recompilés à la nouvelle version, c&#8217;est ce qu&#8217;on appelle une transition et peut demander un certain travail. Heureusement, notre nombre ABI continuera à correspondre au SONAME des amonts, mais parfois ils introduisent des incompatibilités sans changer leurs numéros de version et nous devrons changer les nôtres.</p>
<p>En regardant dans debian/libnova-0.12-2.install, nous voyons qu&#8217;il comprend deux fichiers&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>usr/lib/libnova-0.12.so.2
usr/lib/libnova-0.12.so.2.0.0
</pre></div>
</div>
<p>Le dernier est la bibliothèque réelle, se terminant par un numéro de version mineur et un point. Le premier est un lien symbolique pointant vers la bibliothèque réelle. Le lien symbolique est ce que les programmes utilisant la bibliothèque rechercheront, les programmes en cours d&#8217;exécution ne se souciant pas du numéro de version mineur.</p>
<p><tt class="docutils literal"><span class="pre">Libnova-dev.install</span></tt> inclut tous les fichiers nécessaires pour compiler un programme utilisant cette bibliothèque. Les fichiers d&#8217;en-tête, un binaire de configuration, le fichier <tt class="docutils literal"><span class="pre">.la</span></tt> d&#8217;utilitaires bibliothèque et <tt class="docutils literal"><span class="pre">libnova.so</span></tt> qui est un autre lien symbolique pointant vers la bibliothèque, les programmes compilant avec cette bibliothèque ne se souciant pas du numéro de version majeur (même si le binaire qu&#8217;ils compilent le feront).</p>
<p><tt class="docutils literal"><span class="pre">.la</span></tt> libtool files are needed on some non-Linux systems with poor library
support but usually cause more problems than they solve on Debian systems.  It
is a current <a class="reference external" href="https://wiki.debian.org/ReleaseGoals/LAFileRemoval">Debian goal to remove .la files</a> and we should help with this.</p>
</div>
<div class="section" id="static-libraries">
<h2>10.2. Les bibliothèques statiques<a class="headerlink" href="#static-libraries" title="Lien permanent vers ce titre"></a></h2>
<p>Les paquets -dev délivrent aussi <tt class="docutils literal"><span class="pre">usr/lib/libnova.a</span></tt>. Il s&#8217;agit d&#8217;une bibliothèque statique, une alternative à la bibliothèque partagée. Tout programme compilé avec la bibliothèque statique comprendra le répertoire du code en lui-même. Cela contourne le souci de la compatibilité binaire de la bibliothèque. Mais cela signifie aussi que tous les bogues, y compris les problèmes de sécurité, ne seront pas mis à jour avec la bibliothèque jusqu&#8217;à ce que le programme soit recompilé. Pour cette raison, l&#8217;usage de programmes utilisant des bibliothèques statiques est déconseillé.</p>
</div>
<div class="section" id="symbol-files">
<h2>10.3. Les fichiers de symboles<a class="headerlink" href="#symbol-files" title="Lien permanent vers ce titre"></a></h2>
<p>Quand un paquet est construit à partir d&#8217;une bibliothèque, le mécanisme <tt class="docutils literal"><span class="pre">shlibs</span></tt> ajoute une dépendance de paquet sur cette bibliothèque. C&#8217;est pourquoi de nombreux programmes auront <tt class="docutils literal"><span class="pre">Depends:</span> <span class="pre">${shlibs:Depends}</span></tt> dans <tt class="docutils literal"><span class="pre">debian/control</span></tt>. Ceci est remplacé par les dépendances de bibliothèque à la compilation. Cependant shlibs peut seulement le faire dépendre du numéro de version majeure ABI, <tt class="docutils literal"><span class="pre">2</span></tt> dans notre exemple libnova. Si de nouveaux symboles sont ajoutés à libnova 2.1, un programme utilisant ces symboles pourrait toujours être installé avec libnova ABI 2.0, ce qui provoquerait son plantage.</p>
<p>Pour rendre les dépendances de bibliothèques plus précises, nous gardons les fichiers <tt class="docutils literal"><span class="pre">.symbols</span></tt> qui répertorient tous les symboles d&#8217;une bibliothèque et la version à laquelle ils sont apparus.</p>
<p>libnova n&#8217;a pas de fichier de symboles, nous pouvons donc en créer un. Commencez par la compilation du paquet&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ bzr builddeb -- -nc
</pre></div>
</div>
<p>Le <tt class="docutils literal"><span class="pre">-nc</span></tt> terminera la compilation sans supprimer les fichiers de construction. Modifiez le fichier compilé et exécutez <tt class="docutils literal"><span class="pre">dpkg-gensymbols</span></tt> pour le paquet de bibliothèque&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ cd ../build-area/libnova-0.12.2/
$ dpkg-gensymbols -plibnova-0.12-2 &gt; symbols.diff
</pre></div>
</div>
<p>Cela crée un fichier diff que vous pouvez rendre automatiquement applicable&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ patch -p0 &lt; symbols.diff
</pre></div>
</div>
<p>Ce qui va créer un fichier nommé de manière similaire à <tt class="docutils literal"><span class="pre">dpkg-gensymbolsnY_WWI</span></tt> listant tous les symboles. Il répertorie également la version actuelle du paquet. Nous pouvons supprimer la version d&#8217;empaquetage de celles indiquées dans le fichier de symboles car de nouveaux symboles ne sont généralement pas ajoutés par de nouvelles versions d&#8217;empaquetage, mais par les développeurs de l&#8217;amont&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ sed -i s,-0ubuntu2,, dpkg-gensymbolsnY_WWI
</pre></div>
</div>
<p>Maintenant, déplacez le fichier à sa place, soumettez et faites un test de compilation&nbsp;:</p>
<div class="highlight-python"><div class="highlight"><pre>$ mv dpkg-gensymbolsnY_WWI ../../libnova/debian/libnova-0.12-2.symbols
$ cd ../../libnova
$ bzr add debian/libnova-0.12-2.symbols
$ bzr commit -m &quot;add symbols file&quot;
$ bzr builddeb
</pre></div>
</div>
<p>Si la compilation s&#8217;achève avec succès, le fichier de symboles est correct. Avec la prochaine version amont de libnova, vous devrez exécuter dpkg-gensymbols à nouveau et cela vous donnera un fichier diff pour mettre à jour le fichier de symboles.</p>
</div>
<div class="section" id="c-library-symbols-files">
<h2>10.4. Les fichiers C++ de la bibliothèque de symboles<a class="headerlink" href="#c-library-symbols-files" title="Lien permanent vers ce titre"></a></h2>
<p>C++ has even more exacting standards of binary compatibility than C.  The
Debian Qt/KDE Team maintain some scripts to handle this, see their <a class="reference external" href="http://pkg-kde.alioth.debian.org/symbolfiles.html">Working with
symbols files</a> page for how to use them.</p>
</div>
<div class="section" id="further-reading">
<h2>10.5. Lectures complémentaires<a class="headerlink" href="#further-reading" title="Lien permanent vers ce titre"></a></h2>
<p>Junichi Uekawa&#8217;s <a class="reference external" href="http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html">Debian Library Packaging Guide</a> goes into this topic in more
detail.</p>
</div>
</div>


	<div class="divide"></div>

          </div>

  <div id="sidebar" class="grid_3 omega">
    <div class="container-tweet">
        <h3>Table des Matières</h3>
        <div class="toc">
          <ul>
<li><a class="reference internal" href="#">10. Bibliothèques partagées</a><ul>
<li><a class="reference internal" href="#an-example">10.1. Un exemple</a></li>
<li><a class="reference internal" href="#static-libraries">10.2. Les bibliothèques statiques</a></li>
<li><a class="reference internal" href="#symbol-files">10.3. Les fichiers de symboles</a></li>
<li><a class="reference internal" href="#c-library-symbols-files">10.4. Les fichiers C++ de la bibliothèque de symboles</a></li>
<li><a class="reference internal" href="#further-reading">10.5. Lectures complémentaires</a></li>
</ul>
</li>
</ul>

        </div>

      <div class="browse-guide">
        <h3>Browse The Guide:</h3>
        <ul>
          <li class="prev">
            <a href="fixing-ftbfs.html"
                      title="Sujet précédent: 9. Réparation de paquets FTBFS">Go Previous</a>
          </li>
          
          <li class="center">
            <a title="Back to Index" href="index.html">Index Guide</a>
          </li>
        
          <li class="next">
            <a href="backports.html"
                      title="Sujet suivant: 11. Rétroportage de mises à jour logicielles">Go Next</a>
          </li>
        </ul>
        <span>Cette page:</span> <a href="./_sources/libraries.txt"
               rel="nofollow">Montrer la source</a>
      </div>
     </div>
     <div id="back_top"><a href="#top">Back to Top</a></div>
    </div>
    <!--</section>-->
  </div>
</div>
<div class="shadow"></div>
<footer>
  <div>
      Version: 0.3.6.
    <a href="https://bugs.launchpad.net/ubuntu-packaging-guide">Report bugs</a> or 
    <a href="https://code.launchpad.net/~ubuntu-packaging-guide-team/ubuntu-packaging-guide/trunk">grab the source code</a> from Launchpad.
      Créé avec <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
      <br />
        &copy; Copyright 2010-2014 , Ubuntu Developers, Creative Commons Attribution-ShareAlike 3.0.
        <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">
        Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.
        <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">
        <img alt="Creative Commons License" style="border-width:0" 
        src="./_static/images/cc-by-sa.png" /></a>
    <br />
    <a href="http://people.ubuntu.com/~mitya57/ubuntu-packaging-guide-readme.html#translating">Help translate</a> or
    <a href="./_static/translators.html">view the list of translators</a>.

  </div>
</footer>
  </body>
</html>