/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 — 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 »</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’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’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’amont et nous les suivons dans nos noms de paquets binaires à l’aide d’un nombre ABI, mais parfois les amonts n’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’amont sous forme de versions autonomes. Parfois, elles sont distribuées comme partie d’un programme. Dans ce cas, elles peuvent être incluses dans le paquet binaire avec le programme (c’est ce qu’on appelle le regroupement) lorsqu’il n’est pas prévu que d’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> où <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’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 :</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 :</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’est le cas, mais pas toujours). Ici, l’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’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’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’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’est ce qu’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’il comprend deux fichiers :</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’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’en-tête, un binaire de configuration, le fichier <tt class="docutils literal"><span class="pre">.la</span></tt> d’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’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’agit d’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’à ce que le programme soit recompilé. Pour cette raison, l’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’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’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’une bibliothèque et la version à laquelle ils sont apparus.</p>
<p>libnova n’a pas de fichier de symboles, nous pouvons donc en créer un. Commencez par la compilation du paquet :</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 :</p>
<div class="highlight-python"><div class="highlight"><pre>$ cd ../build-area/libnova-0.12.2/
$ dpkg-gensymbols -plibnova-0.12-2 > symbols.diff
</pre></div>
</div>
<p>Cela crée un fichier diff que vous pouvez rendre automatiquement applicable :</p>
<div class="highlight-python"><div class="highlight"><pre>$ patch -p0 < 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’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’empaquetage, mais par les développeurs de l’amont :</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 :</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 "add symbols file"
$ bzr builddeb
</pre></div>
</div>
<p>Si la compilation s’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’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 />
© 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>
|