add another second
[debian-policy.git] / policy / ch-sharedlibs.rst
blob2acb909a616f5317e8c7c9d70dad79b6c2aed1cb
1 Shared libraries
2 ================
4 Packages containing shared libraries must be constructed with a little
5 care to make sure that the shared library is always available. This is
6 especially important for packages whose shared libraries are vitally
7 important, such as the C library (currently ``libc6``).
9 This section deals only with public shared libraries: shared libraries
10 that are placed in directories searched by the dynamic linker by default
11 or which are intended to be linked against normally and possibly used by
12 other, independent packages. Shared libraries that are internal to a
13 particular package or that are only loaded as dynamic modules are not
14 covered by this section and are not subject to its requirements.
16 A shared library is identified by the ``SONAME`` attribute stored in its
17 dynamic section. When a binary is linked against a shared library, the
18 ``SONAME`` of the shared library is recorded in the binary's ``NEEDED``
19 section so that the dynamic linker knows that library must be loaded at
20 runtime. The shared library file's full name (which usually contains
21 additional version information not needed in the ``SONAME``) is therefore
22 normally not referenced directly. Instead, the shared library is loaded by
23 its ``SONAME``, which exists on the file system as a symlink pointing to
24 the full name of the shared library. This symlink must be provided by the
25 package.  :ref:`s-sharedlibs-runtime` describes how to do this.  [#]_
27 When linking a binary or another shared library against a shared
28 library, the ``SONAME`` for that shared library is not yet known.
29 Instead, the shared library is found by looking for a file matching the
30 library name with ``.so`` appended. This file exists on the file system
31 as a symlink pointing to the shared library.
33 Shared libraries are normally split into several binary packages. The
34 ``SONAME`` symlink is installed by the runtime shared library package,
35 and the bare ``.so`` symlink is installed in the development package
36 since it's only used when linking binaries or shared libraries. However,
37 there are some exceptions for unusual shared libraries or for shared
38 libraries that are also loaded as dynamic modules by other programs.
40 This section is primarily concerned with how the separation of shared
41 libraries into multiple packages should be done and how dependencies on
42 and between shared library binary packages are managed in Debian.
43 :ref:`s-libraries` should be read in conjunction with
44 this section and contains additional rules for the files contained in
45 the shared library packages.
47 .. [#] This is a convention of shared library versioning, but not a
48        requirement. Some libraries use the ``SONAME`` as the full library
49        file name instead and therefore do not need a symlink. Most,
50        however, encode additional information about backwards-compatible
51        revisions as a minor version number in the file name. The
52        ``SONAME`` itself only changes when binaries linked with the
53        earlier version of the shared library may no longer work, but the
54        filename may change with each release of the library. See
55        :ref:`s-sharedlibs-runtime` for more information.
57 .. _s-sharedlibs-runtime:
59 Run-time shared libraries
60 -------------------------
62 The run-time shared library must be placed in a package whose name changes
63 whenever the ``SONAME`` of the shared library changes. This allows several
64 versions of the shared library to be installed at the same time, allowing
65 installation of the new version of the shared library without immediately
66 breaking binaries that depend on the old version. Normally, the run-time
67 shared library and its ``SONAME`` symlink should be placed in a package
68 named libraryname\ *soversion*, where *soversion* is the version number in
69 the ``SONAME`` of the shared library.  Alternatively, if it would be
70 confusing to directly append *soversion* to libraryname (if, for example,
71 libraryname itself ends in a number), you should use
72 libraryname-\ *soversion* instead. [#]_
74 To determine the *soversion*, look at the ``SONAME`` of the library,
75 stored in the ELF ``SONAME`` attribute. It is usually of the form
76 ``name.so.major-version`` (for example, ``libz.so.1``). The version part
77 is the part which comes after ``.so.``, so in that example it is ``1``.
78 The soname may instead be of the form ``name-major-version.so``, such as
79 ``libdb-5.1.so``, in which case the name would be ``libdb`` and the
80 version would be ``5.1``.
82 If you have several shared libraries built from the same source tree,
83 you may lump them all together into a single shared library package
84 provided that all of their ``SONAME``\ s will always change together. Be
85 aware that this is not normally the case, and if the ``SONAME``\ s do
86 not change together, upgrading such a merged shared library package will
87 be unnecessarily difficult because of file conflicts with the old
88 version of the package. When in doubt, always split shared library
89 packages so that each binary package installs a single shared library.
91 Every time the shared library ABI changes in a way that may break
92 binaries linked against older versions of the shared library, the
93 ``SONAME`` of the library and the corresponding name for the binary
94 package containing the runtime shared library should change. Normally,
95 this means the ``SONAME`` should change any time an interface is removed
96 from the shared library or the signature of an interface (the number of
97 parameters or the types of parameters that it takes, for example) is
98 changed. This practice is vital to allowing clean upgrades from older
99 versions of the package and clean transitions between the old ABI and
100 new ABI without having to upgrade every affected package simultaneously.
102 The ``SONAME`` and binary package name need not, and indeed normally
103 should not, change if new interfaces are added but none are removed or
104 changed, since this will not break binaries linked against the old
105 shared library. Correct versioning of dependencies on the newer shared
106 library by binaries that use the new interfaces is handled via the
107 ``symbols`` or ``shlibs`` system (see :ref:`s-sharedlibs-depends`).
109 The package should install the shared libraries under their normal
110 names. For example, the libgdbm3 package should install
111 ``libgdbm.so.3.0.0`` as ``/usr/lib/libgdbm.so.3.0.0``. The files should
112 not be renamed or re-linked by any ``prerm`` or ``postrm`` scripts;
113 ``dpkg`` will take care of renaming things safely without affecting
114 running programs, and attempts to interfere with this are likely to lead
115 to problems.
117 Shared libraries should not be installed executable, since the dynamic
118 linker does not require this and trying to execute a shared library
119 usually results in a core dump.
121 The run-time library package should include the symbolic link for the
122 ``SONAME`` that ``ldconfig`` would create for the shared libraries. For
123 example, the libgdbm3 package should include a symbolic link from
124 ``/usr/lib/libgdbm.so.3`` to ``libgdbm.so.3.0.0``. This is needed so
125 that the dynamic linker (for example ``ld.so`` or ``ld-linux.so.*``) can
126 find the library between the time that ``dpkg`` installs it and the time
127 that ``ldconfig`` is run in the ``postinst`` script.  [#]_
129 .. [#] The following command, when run on a shared library, will output
130        the name to be used for the Debian package containing that shared
131        library::
133            objdump -p /path/to/libfoo-bar.so.1.2.3 \
134                | sed -n -e's/^[[:space:]]*SONAME[[:space:]]*//p' \
135                | LC_ALL=C sed -r -e's/([0-9])\.so\./\1-/; s/\.so(\.|$)//; y/_/-/; s/(.*)/\L&/'
137 .. [#] The package management system requires the library to be placed
138        before the symbolic link pointing to it in the ``.deb`` file. This
139        is so that when ``dpkg`` comes to install the symlink (overwriting
140        the previous symlink pointing at an older version of the library),
141        the new shared library is already in place. In the past, this was
142        achieved by creating the library in the temporary packaging
143        directory before creating the symlink. Unfortunately, this was not
144        always effective, since the building of the tar file in the
145        ``.deb`` depended on the behavior of the underlying file
146        system. Some file systems (such as reiserfs) reorder the files so
147        that the order of creation is forgotten. Since version 1.7.0,
148        ``dpkg`` reorders the files itself as necessary when building a
149        package. Thus it is no longer important to concern oneself with the
150        order of file creation.
152 .. _s-ldconfig:
154 ``ldconfig``
155 ~~~~~~~~~~~~
157 Any package installing shared libraries in one of the default library
158 directories of the dynamic linker (which are currently ``/usr/lib`` and
159 ``/lib``) or a directory that is listed in ``/etc/ld.so.conf`` [#]_
160 must use ``ldconfig`` to update the shared library system.
162 Any such package must have the line ``activate-noawait ldconfig`` in its
163 ``triggers`` control file (i.e. ``DEBIAN/triggers``).
165 .. [#] These are currently ``/usr/local/lib`` plus directories under
166        ``/lib`` and ``/usr/lib`` matching the multiarch triplet for the
167        system architecture.
169 .. _s-sharedlibs-support-files:
171 Shared library support files
172 ----------------------------
174 If your package contains files whose names do not change with each
175 change in the library shared object version, you must not put them in
176 the shared library package. Otherwise, several versions of the shared
177 library cannot be installed at the same time without filename clashes,
178 making upgrades and transitions unnecessarily difficult.
180 It is recommended that supporting files and run-time support programs
181 that do not need to be invoked manually by users, but are nevertheless
182 required for the package to function, be placed (if they are binary) in
183 a subdirectory of ``/usr/lib``, preferably under
184 ``/usr/lib/``\ package-name. If the program or file is architecture
185 independent, the recommendation is for it to be placed in a subdirectory
186 of ``/usr/share`` instead, preferably under
187 ``/usr/share/``\ package-name. Following the package-name naming
188 convention ensures that the file names change when the shared object
189 version changes.
191 Run-time support programs that use the shared library but are not
192 required for the library to function or files used by the shared library
193 that can be used by any version of the shared library package should
194 instead be put in a separate package. This package might typically be
195 named libraryname-tools; note the absence of the soversion in the
196 package name.
198 Files and support programs only useful when compiling software against
199 the library should be included in the development package for the
200 library.  [#]_
202 .. [#] For example, a ``package-name-config`` script or pkg-config
203        configuration files.
205 .. _s-sharedlibs-static:
207 Static libraries
208 ----------------
210 The static library (``libraryname.a``) is usually provided in addition
211 to the shared version. It is placed into the development package (see
212 below).
214 In some cases, it is acceptable for a library to be available in static
215 form only; these cases include:
217 - libraries for languages whose shared library support is immature or
218   unstable
220 - libraries whose interfaces are in flux or under development (commonly
221   the case when the library's major version number is zero, or where the
222   ABI breaks across patchlevels)
224 - libraries which are explicitly intended to be available only in static
225   form by their upstream author(s)
227 .. _s-sharedlibs-dev:
229 Development files
230 -----------------
232 If there are development files associated with a shared library, the
233 source package needs to generate a binary development package named
234 libraryname-dev, or if you need to support multiple development versions
235 at a time, librarynameapiversion-dev. Installing the development package
236 must result in installation of all the development files necessary for
237 compiling programs against that shared library.  [#]_
239 In case several development versions of a library exist, you may need to
240 use ``dpkg``'s Conflicts mechanism (see :ref:`s-conflicts`) to ensure that
241 the user only installs one development version at a time (as different
242 development versions are likely to have the same header files in them,
243 which would cause a filename clash if both were unpacked).
245 The development package should contain a symlink for the associated
246 shared library without a version number. For example, the libgdbm-dev
247 package should include a symlink from ``/usr/lib/libgdbm.so`` to
248 ``libgdbm.so.3.0.0``. This symlink is needed by the linker (``ld``) when
249 compiling packages, as it will only look for ``libgdbm.so`` when
250 compiling dynamically.
252 If the package provides Ada Library Information (``*.ali``) files for use
253 with GNAT, these files must be installed read-only (mode 0444) so that
254 GNAT will not attempt to recompile them. This overrides the normal file
255 mode requirements given in :ref:`s-permissions-owners`.
257 .. [#] This wording allows the development files to be split into several
258        packages, such as a separate architecture-independent
259        libraryname-headers, provided that the development package depends
260        on all the required additional packages.
262 .. _s-sharedlibs-intradeps:
264 Dependencies between the packages of the same library
265 -----------------------------------------------------
267 Typically the development version should have an exact version dependency
268 on the runtime library, to make sure that compilation and linking happens
269 correctly. The ``${binary:Version}`` substitution variable can be useful
270 for this purpose.  [#]_
272 .. [#] Previously, ``${Source-Version}`` was used, but its name was
273        confusing and it has been deprecated since dpkg 1.13.19.
275 .. _s-sharedlibs-depends:
277 Dependencies between the library and other packages
278 ---------------------------------------------------
280 If a package contains a binary or library which links to a shared
281 library, we must ensure that, when the package is installed on the
282 system, all of the libraries needed are also installed. These
283 dependencies must be added to the binary package when it is built, since
284 they may change based on which version of a shared library the binary or
285 library was linked with even if there are no changes to the source of
286 the binary (for example, symbol versions change, macros become functions
287 or vice versa, or the binary package may determine at compile-time
288 whether new library interfaces are available and can be called). To
289 allow these dependencies to be constructed, shared libraries must
290 provide either a ``symbols`` file or a ``shlibs`` file. These provide
291 information on the package dependencies required to ensure the presence
292 of interfaces provided by this library. Any package with binaries or
293 libraries linking to a shared library must use these files to determine
294 the required dependencies when it is built. Other packages which use a
295 shared library (for example using ``dlopen()``) should compute
296 appropriate dependencies using these files at build time as well.
298 The two mechanisms differ in the degree of detail that they provide. A
299 ``symbols`` file documents, for each symbol exported by a library, the
300 minimal version of the package any binary using this symbol will need.
301 This is typically the version of the package in which the symbol was
302 introduced. This information permits detailed analysis of the symbols
303 used by a particular package and construction of an accurate dependency,
304 but it requires the package maintainer to track more information about
305 the shared library.
307 A ``shlibs`` file, in contrast, only documents the last time the library
308 ABI changed in any way. It only provides information about the library
309 as a whole, not individual symbols. When a package is built using a
310 shared library with only a ``shlibs`` file, the generated dependency
311 will require a version of the shared library equal to or newer than the
312 version of the last ABI change. This generates unnecessarily restrictive
313 dependencies compared to ``symbols`` files if none of the symbols used
314 by the package have changed. This, in turn, may make upgrades needlessly
315 complex and unnecessarily restrict use of the package on systems with
316 older versions of the shared libraries.
318 ``shlibs`` files also only support a limited range of library SONAMEs,
319 making it difficult to use ``shlibs`` files in some unusual corner
320 cases.  [#]_
322 ``symbols`` files are therefore recommended for most shared library
323 packages since they provide more accurate dependencies. For most C
324 libraries, the additional detail required by ``symbols`` files is not
325 too difficult to maintain. However, maintaining exhaustive symbols
326 information for a C++ library can be quite onerous, so ``shlibs`` files
327 may be more appropriate for most C++ libraries. Libraries with a
328 corresponding udeb must also provide a ``shlibs`` file, since the udeb
329 infrastructure does not use ``symbols`` files.
331 .. [#] A ``shlibs`` file represents an SONAME as a library name and
332        version number, such as ``libfoo VERSION``, instead of recording
333        the actual SONAME. If the SONAME doesn't match one of the two
334        expected formats (``libfoo-VERSION.so`` or ``libfoo.so.VERSION``),
335        it cannot be represented.
337 .. _s-dpkg-shlibdeps:
339 Generating dependencies on shared libraries
340 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
342 When a package that contains any shared libraries or compiled binaries is
343 built, it must run ``dpkg-shlibdeps`` on each shared library and compiled
344 binary to determine the libraries used and hence the dependencies needed
345 by the package. [#]_ To do this, put a call to ``dpkg-shlibdeps`` into
346 your ``debian/rules`` file in the source package. List all of the compiled
347 binaries, libraries, or loadable modules in your package. [#]_
348 ``dpkg-shlibdeps`` will use the ``symbols`` or ``shlibs`` files installed
349 by the shared libraries to generate dependency information. The package
350 must then provide a substitution variable into which the discovered
351 dependency information can be placed.
353 If you are creating a udeb for use in the Debian Installer, you will
354 need to specify that ``dpkg-shlibdeps`` should use the dependency line
355 of type ``udeb`` by adding the ``-tudeb`` option.  [#]_ If there is no
356 dependency line of type ``udeb`` in the ``shlibs`` file,
357 ``dpkg-shlibdeps`` will fall back to the regular dependency line.
359 ``dpkg-shlibdeps`` puts the dependency information into the
360 ``debian/substvars`` file by default, which is then used by
361 ``dpkg-gencontrol``. You will need to place a ``${shlibs:Depends}``
362 variable in the ``Depends`` field in the control file of every binary
363 package built by this source package that contains compiled binaries,
364 libraries, or loadable modules. If you have multiple binary packages,
365 you will need to call ``dpkg-shlibdeps`` on each one which contains
366 compiled libraries or binaries. For example, you could use the ``-T``
367 option to the ``dpkg`` utilities to specify a different ``substvars``
368 file for each binary package.  [#]_
370 For more details on ``dpkg-shlibdeps``, see its manual page.
372 We say that a binary ``foo`` *directly* uses a library ``libbar`` if it
373 is explicitly linked with that library (that is, the library is listed
374 in the ELF ``NEEDED`` attribute, caused by adding ``-lbar`` to the link
375 line when the binary is created). Other libraries that are needed by
376 ``libbar`` are linked *indirectly* to ``foo``, and the dynamic linker
377 will load them automatically when it loads ``libbar``. A package should
378 depend on the libraries it directly uses, but not the libraries it only
379 uses indirectly. The dependencies for the libraries used directly will
380 automatically pull in the indirectly-used libraries. ``dpkg-shlibdeps``
381 will handle this logic automatically, but package maintainers need to be
382 aware of this distinction between directly and indirectly using a
383 library if they have to override its results for some reason.  [#]_
385 .. [#] ``dpkg-shlibdeps`` will use a program like ``objdump`` or
386        ``readelf`` to find the libraries and the symbols in those
387        libraries directly needed by the binaries or shared libraries in
388        the package.
390 .. [#] The easiest way to call ``dpkg-shlibdeps`` correctly is to use a
391        package helper framework such as debhelper. If you are using
392        debhelper, the ``dh_shlibdeps`` program will do this work for
393        you. It will also correctly handle multi-binary packages.
395 .. [#] ``dh_shlibdeps`` from the ``debhelper`` suite will automatically
396        add this option if it knows it is processing a udeb.
398 .. [#] Again, ``dh_shlibdeps`` and ``dh_gencontrol`` will handle
399        everything except the addition of the variable to the control file
400        for you if you're using debhelper, including generating separate
401        ``substvars`` files for each binary package and calling
402        ``dpkg-gencontrol`` with the appropriate flags.
404 .. [#] A good example of where this helps is the following: We could
405        update ``libimlib`` with a new version that supports a new revision
406        of a graphics format called dgf (but retaining the same major
407        version number) and depends on a new library package libdgf4
408        instead of the older libdgf3. If we used ``ldd`` to add
409        dependencies for every library directly or indirectly linked with a
410        binary, every package that uses ``libimlib`` would need to be
411        recompiled so it would also depend on libdgf4 in order to retire
412        the older libdgf3 package. Since dependencies are only added based
413        on ELF ``NEEDED`` attribute, packages using ``libimlib`` can rely
414        on ``libimlib`` itself having the dependency on an appropriate
415        version of ``libdgf`` and do not need rebuilding.
417 .. _s-sharedlibs-updates:
419 Shared library ABI changes
420 ~~~~~~~~~~~~~~~~~~~~~~~~~~
422 Maintaining a shared library package using either ``symbols`` or
423 ``shlibs`` files requires being aware of the exposed ABI of the shared
424 library and any changes to it. Both ``symbols`` and ``shlibs`` files
425 record every change to the ABI of the shared library; ``symbols`` files
426 do so per public symbol, whereas ``shlibs`` files record only the last
427 change for the entire library.
429 There are two types of ABI changes: ones that are backward-compatible
430 and ones that are not. An ABI change is backward-compatible if any
431 reasonable program or library that was linked with the previous version
432 of the shared library will still work correctly with the new version of
433 the shared library.  [#]_ Adding new symbols to the shared library is a
434 backward-compatible change. Removing symbols from the shared library is
435 not. Changing the behavior of a symbol may or may not be
436 backward-compatible depending on the change; for example, changing a
437 function to accept a new enum constant not previously used by the
438 library is generally backward-compatible, but changing the members of a
439 struct that is passed into library functions is generally not unless the
440 library takes special precautions to accept old versions of the data
441 structure.
443 ABI changes that are not backward-compatible normally require changing the
444 ``SONAME`` of the library and therefore the shared library package name,
445 which forces rebuilding all packages using that shared library to update
446 their dependencies and allow them to use the new version of the shared
447 library. For more information, see :ref:`s-sharedlibs-runtime`. The
448 remainder of this section will deal with backward-compatible changes.
450 Backward-compatible changes require either updating or recording the
451 minimal-version for that symbol in ``symbols`` files or updating the
452 version in the dependencies in ``shlibs`` files. For more information on
453 how to do this in the two formats, see :ref:`s-symbols` and
454 :ref:`s-shlibs`. Below are general rules that apply to both files.
456 The easy case is when a public symbol is added. Simply add the version
457 at which the symbol was introduced (for ``symbols`` files) or update the
458 dependency version (for ``shlibs``) files. But special care should be
459 taken to update dependency versions when the behavior of a public symbol
460 changes. This is easy to neglect, since there is no automated method of
461 determining such changes, but failing to update versions in this case
462 may result in binary packages with too-weak dependencies that will fail
463 at runtime, possibly in ways that can cause security vulnerabilities. If
464 the package maintainer believes that a symbol behavior change may have
465 occurred but isn't sure, it's safer to update the version rather than
466 leave it unmodified. This may result in unnecessarily strict
467 dependencies, but it ensures that packages whose dependencies are
468 satisfied will work properly.
470 A common example of when a change to the dependency version is required
471 is a function that takes an enum or struct argument that controls what
472 the function does. For example::
474     enum library_op { OP_FOO, OP_BAR };
475     int library_do_operation(enum library_op);
477 If a new operation, ``OP_BAZ``, is added, the minimal-version of
478 ``library_do_operation`` (for ``symbols`` files) or the version in the
479 dependency for the shared library (for ``shlibs`` files) must be
480 increased to the version at which ``OP_BAZ`` was introduced. Otherwise,
481 a binary built against the new version of the library (having detected
482 at compile-time that the library supports ``OP_BAZ``) may be installed
483 with a shared library that doesn't support ``OP_BAZ`` and will fail at
484 runtime when it tries to pass ``OP_BAZ`` into this function.
486 Dependency versions in either ``symbols`` or ``shlibs`` files normally
487 should not contain the Debian revision of the package, since the library
488 behavior is normally fixed for a particular upstream version and any
489 Debian packaging of that upstream version will have the same behavior.
490 In the rare case that the library behavior was changed in a particular
491 Debian revision, appending ``~`` to the end of the version that includes
492 the Debian revision is recommended, since this allows backports of the
493 shared library package using the normal backport versioning convention
494 to satisfy the dependency.
496 .. [#] An example of an "unreasonable" program is one that uses library
497        interfaces that are documented as internal and unsupported. If the
498        only programs or libraries affected by a change are "unreasonable"
499        ones, other techniques, such as declaring ``Breaks`` relationships
500        with affected packages or treating their usage of the library as
501        bugs in those packages, may be appropriate instead of changing the
502        SONAME.  However, the default approach is to change the SONAME for
503        any change to the ABI that could break a program.
505 .. _s-sharedlibs-symbols:
507 The ``symbols`` system
508 ~~~~~~~~~~~~~~~~~~~~~~
510 In the following sections, we will first describe where the various
511 ``symbols`` files are to be found, then the ``symbols`` file format, and
512 finally how to create ``symbols`` files if your package contains a
513 shared library.
515 .. _s-symbols-paths:
517 The ``symbols`` files present on the system
518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
520 ``symbols`` files for a shared library are normally provided by the
521 shared library package as a control file, but there are several override
522 paths that are checked first in case that information is wrong or
523 missing. The following list gives them in the order in which they are
524 read by ``dpkg-shlibdeps``. The first one that contains the required
525 information is used.
527 ``debian/*/DEBIAN/symbols``
528     During the package build, if the package itself contains shared
529     libraries with ``symbols`` files, they will be generated in these
530     staging directories by ``dpkg-gensymbols`` (see `Providing a symbols
531     file <#s-providing-symbols>`__). ``symbols`` files found in the build
532     tree take precedence over ``symbols`` files from other binary
533     packages.
535     These files must exist before ``dpkg-shlibdeps`` is run or the
536     dependencies of binaries and libraries from a source package on
537     other libraries from that same source package will not be correct.
538     In practice, this means that ``dpkg-gensymbols`` must be run before
539     ``dpkg-shlibdeps`` during the package build.  [#]_
541 ``/etc/dpkg/symbols/package.symbols.arch`` and ``/etc/dpkg/symbols/package.symbols``
542     Per-system overrides of shared library dependencies. These files
543     normally do not exist. They are maintained by the local system
544     administrator and must not be created by any Debian package.
546 ``symbols`` control files for packages installed on the system
547     The ``symbols`` control files for all the packages currently
548     installed on the system are searched last. This will be the most
549     common source of shared library dependency information. These files
550     can be read with ``dpkg-query --control-show package symbols``.
552 Be aware that if a ``debian/shlibs.local`` exists in the source package,
553 it will override any ``symbols`` files. This is the only case where a
554 ``shlibs`` is used despite ``symbols`` files being present. See
555 :ref:`s-shlibs-paths` and :ref:`s-sharedlibs-shlibdeps` for more
556 information.
558 .. [#] An example may clarify. Suppose the source package ``foo``
559        generates two binary packages, ``libfoo2`` and
560        ``foo-runtime``. When building the binary packages, the contents of
561        the packages are staged in the directories ``debian/libfoo2`` and
562        ``debian/foo-runtime`` respectively. (``debian/tmp`` could be used
563        instead of one of these.)  Since ``libfoo2`` provides the
564        ``libfoo`` shared library, it will contain a ``symbols`` file,
565        which will be installed in ``debian/libfoo2/DEBIAN/symbols``,
566        eventually to be included as a control file in that package. When
567        ``dpkg-shlibdeps`` is run on the executable
568        ``debian/foo-runtime/usr/bin/foo-prog``, it will examine the
569        ``debian/libfoo2/DEBIAN/symbols`` file to determine whether
570        ``foo-prog``'s library dependencies are satisfied by any of the
571        libraries provided by ``libfoo2``. Since those binaries were linked
572        against the just-built shared library as part of the build process,
573        the ``symbols`` file for the newly-built ``libfoo2`` must take
574        precedence over a ``symbols`` file for any other ``libfoo2``
575        package already installed on the system.
577 .. _s-symbols:
579 The ``symbols`` File Format
580 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
582 The following documents the format of the ``symbols`` control file as
583 included in binary packages. These files are built from template
584 ``symbols`` files in the source package by ``dpkg-gensymbols``. The
585 template files support a richer syntax that allows ``dpkg-gensymbols`` to
586 do some of the tedious work involved in maintaining ``symbols`` files,
587 such as handling C++ symbols or optional symbols that may not exist on
588 particular architectures. When writing ``symbols`` files for a shared
589 library package, refer to dpkg-gensymbols(1) for the richer syntax.
591 A ``symbols`` may contain one or more entries, one for each shared
592 library contained in the package corresponding to that ``symbols``. Each
593 entry has the following format::
595     library-soname main-dependency-template
596      [| alternative-dependency-template]
597      [...]
598      [* field-name: field-value]
599      [...]
600      symbol minimal-version[ id-of-dependency-template]
602 To explain this format, we'll use the ``zlib1g`` package as an example,
603 which (at the time of writing) installs the shared library
604 ``/usr/lib/libz.so.1.2.3.4``. Mandatory lines will be described first,
605 followed by optional lines.
607 ``library-soname`` must contain exactly the value of the ELF ``SONAME``
608 attribute of the shared library. In our example, this is ``libz.so.1``.
609 [#]_
611 ``main-dependency-template`` has the same syntax as a dependency field
612 in a binary package control file, except that the string ``#MINVER#``
613 is replaced by a version restriction like ``(>= version)`` or by
614 nothing if an unversioned dependency is deemed sufficient. The version
615 restriction will be based on which symbols from the shared library are
616 referenced and the version at which they were introduced (see
617 below). In nearly all cases, ``main-dependency-template`` will be
618 ``package #MINVER#``, where package is the name of the binary package
619 containing the shared library. This adds a simple, possibly-versioned
620 dependency on the shared library package. In some rare cases, such as
621 when multiple packages provide the same shared library ABI, the
622 dependency template may need to be more complex.
624 In our example, the first line of the ``zlib1g`` ``symbols`` file would
625 be::
627     libz.so.1 zlib1g #MINVER#
629 Each public symbol exported by the shared library must have a
630 corresponding symbol line, indented by one space. symbol is the
631 exported symbol (which, for C++, means the mangled symbol) followed by
632 ``@`` and the symbol version, or the string ``Base`` if there is no
633 symbol version. ``minimal-version`` is the most recent version of the
634 shared library that changed the behavior of that symbol, whether by
635 adding it, changing its function signature (the parameters, their
636 types, or the return type), or changing its behavior in a way that is
637 visible to a caller. ``id-of-dependency-template`` is an optional
638 field that references an ``alternative-dependency-template``; see
639 below for a full description.
641 For example, ``libz.so.1`` contains the symbols ``compress`` and
642 ``compressBound``. ``compress`` has no symbol version and last changed
643 its behavior in upstream version ``1:1.1.4``. ``compressBound`` has the
644 symbol version ``ZLIB_1.2.0``, was introduced in upstream version
645 ``1:1.2.0``, and has not changed its behavior. Its ``symbols`` file
646 therefore contains the lines::
648     compress@Base 1:1.1.4
649     compressBound@ZLIB_1.2.0 1:1.2.0
651 Packages using only ``compress`` would then get a dependency on
652 ``zlib1g (>= 1:1.1.4)``, but packages using ``compressBound`` would get
653 a dependency on ``zlib1g (>= 1:1.2.0)``.
655 One or more ``alternative-dependency-template`` lines may be
656 provided. These are used in cases where some symbols in the shared
657 library should use one dependency template while others should use a
658 different template.  The alternative dependency templates are used
659 only if a symbol line contains the ``id-of-dependency-template``
660 field. The first alternative dependency template is numbered 1, the
661 second 2, and so forth.  [#]_
663 Finally, the entry for the library may contain one or more metadata
664 fields. Currently, the only supported field-name is
665 ``Build-Depends-Package``, whose value lists the `library development
666 package <#s-sharedlibs-dev>`_ on which packages using this shared library
667 declare a build dependency. If this field is present, ``dpkg-shlibdeps``
668 uses it to ensure that the resulting binary package dependency on the
669 shared library is at least as strict as the source package dependency on
670 the shared library development package.  [#]_ For our example, the
671 ``zlib1g`` ``symbols`` file would contain::
673     * Build-Depends-Package: zlib1g-dev
675 Also see ``deb-symbols(5)``.
677 .. [#] This can be determined by using the command
679        ::
681            readelf -d /usr/lib/libz.so.1.2.3.4 | grep SONAME
683 .. [#] An example of where this may be needed is with a library that
684        implements the libGL interface. All GL implementations provide the
685        same set of base interfaces, and then may provide some additional
686        interfaces only used by programs that require that specific GL
687        implementation. So, for example, libgl1-mesa-glx may use the
688        following ``symbols`` file::
690            libGL.so.1 libgl1
691             | libgl1-mesa-glx #MINVER#
692             publicGlSymbol@Base 6.3-1 [...]
693             implementationSpecificSymbol@Base 6.5.2-7 1
694             [...]
696        Binaries or shared libraries using only ``publicGlSymbol`` would
697        depend only on ``libgl1`` (which may be provided by multiple
698        packages), but ones using ``implementationSpecificSymbol`` would
699        get a dependency on ``libgl1-mesa-glx (>= 6.5.2-7)``.
701 .. [#] This field should normally not be necessary, since if the behavior
702        of any symbol has changed, the corresponding symbol minimal-version
703        should have been increased. But including it makes the ``symbols``
704        system more robust by tightening the dependency in cases where the
705        package using the shared library specifically requires at least a
706        particular version of the shared library development package for
707        some reason.
709 .. _s-providing-symbols:
711 Providing a ``symbols`` file
712 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
714 If your package provides a shared library, you should arrange to include
715 a ``symbols`` control file following the format described above in that
716 package. You must include either a ``symbols`` control file or a
717 ``shlibs`` control file.
719 Normally, this is done by creating a ``symbols`` in the source package
720 named ``debian/package.symbols`` or ``debian/symbols``, possibly with
721 ``.arch`` appended if the symbols information varies by architecture.
722 This file may use the extended syntax documented in dpkg-gensymbols(1).
723 Then, call ``dpkg-gensymbols`` as part of the package build process. It
724 will create ``symbols`` files in the package staging area based on the
725 binaries and libraries in the package staging area and the ``symbols``
726 files in the source package. [#]_
728 Packages that provide ``symbols`` files must keep them up-to-date to
729 ensure correct dependencies in packages that use the shared libraries.
730 This means updating the ``symbols`` file whenever a new public symbol is
731 added, changing the minimal-version field whenever a symbol changes
732 behavior or signature in a backward-compatible way (see
733 :ref:`s-sharedlibs-updates`), and changing the library-soname and
734 main-dependency-template, and probably all of the minimal-version fields,
735 when the library changes ``SONAME``. Removing a public symbol from the
736 ``symbols`` file because it's no longer provided by the library normally
737 requires changing the ``SONAME`` of the library.  See
738 :ref:`s-sharedlibs-runtime` for more information on ``SONAME``\ s.
740 .. [#] If you are using ``debhelper``, ``dh_makeshlibs`` will take care of
741        calling either ``dpkg-gensymbols`` or generating a ``shlibs`` file
742        as appropriate.
744 .. _s-sharedlibs-shlibdeps:
746 The ``shlibs`` system
747 ~~~~~~~~~~~~~~~~~~~~~
749 The ``shlibs`` system is a simpler alternative to the ``symbols`` system
750 for declaring dependencies for shared libraries. It may be more
751 appropriate for C++ libraries and other cases where tracking individual
752 symbols is too difficult. It predated the ``symbols`` system and is
753 therefore frequently seen in older packages. It is also required for
754 udebs, which do not support ``symbols``.
756 In the following sections, we will first describe where the various
757 ``shlibs`` files are to be found, then how to use ``dpkg-shlibdeps``,
758 and finally the ``shlibs`` file format and how to create them.
760 .. _s-shlibs-paths:
762 The ``shlibs`` files present on the system
763 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
765 There are several places where ``shlibs`` files are found. The following
766 list gives them in the order in which they are read by
767 ``dpkg-shlibdeps``. (The first one which gives the required information
768 is used.)
770 ``debian/shlibs.local``
771     This lists overrides for this package. This file should normally not
772     be used, but may be needed temporarily in unusual situations to work
773     around bugs in other packages, or in unusual cases where the
774     normally declared dependency information in the installed ``shlibs``
775     file for a library cannot be used. This file overrides information
776     obtained from any other source.
778 ``/etc/dpkg/shlibs.override``
779     This lists global overrides. This list is normally empty. It is
780     maintained by the local system administrator.
782 ``DEBIAN/shlibs`` files in the "build directory"
783     These files are generated as part of the package build process and
784     staged for inclusion as control files in the binary packages being
785     built. They provide details of any shared libraries included in the
786     same package.
788 ``shlibs`` control files for packages installed on the system
789     The ``shlibs`` control files for all the packages currently installed
790     on the system. These files can be read using
791     ``dpkg-query --control-show package shlibs``.
793 ``/etc/dpkg/shlibs.default``
794     This file lists any shared libraries whose packages have failed to
795     provide correct ``shlibs`` files. It was used when the ``shlibs``
796     setup was first introduced, but it is now normally empty. It is
797     maintained by the ``dpkg`` maintainer.
799 If a ``symbols`` file for a shared library package is available,
800 ``dpkg-shlibdeps`` will always use it in preference to a ``shlibs``,
801 with the exception of ``debian/shlibs.local``. The latter overrides any
802 other ``shlibs`` or ``symbols`` files.
804 .. _s-shlibs:
806 The ``shlibs`` File Format
807 ^^^^^^^^^^^^^^^^^^^^^^^^^^
809 Each ``shlibs`` file has the same format. Lines beginning with ``#`` are
810 considered to be comments and are ignored. Each line is of the form::
812     [type: ]library-name soname-version dependencies ...
814 We will explain this by reference to the example of the ``zlib1g``
815 package, which (at the time of writing) installs the shared library
816 ``/usr/lib/libz.so.1.2.3.4``.
818 ``type`` is an optional element that indicates the type of package for which
819 the line is valid. The only type currently in use is ``udeb``. The colon
820 and space after the type are required.
822 ``library-name`` is the name of the shared library, in this case ``libz``.
823 (This must match the name part of the soname, see below.)
825 ``soname-version`` is the version part of the ELF ``SONAME`` attribute of
826 the library, determined the same way that the soversion component of the
827 recommended shared library package name is determined. See
828 :ref:`s-sharedlibs-runtime` for the details.
830 ``dependencies`` has the same syntax as a dependency field in a binary
831 package control file. It should give details of which packages are
832 required to satisfy a binary built against the version of the library
833 contained in the package. See :ref:`s-depsyntax` for
834 details on the syntax, and :ref:`s-sharedlibs-updates`
835 for details on how to maintain the dependency version constraint.
837 In our example, if the last change to the ``zlib1g`` package that could
838 change behavior for a client of that library was in version
839 ``1:1.2.3.3.dfsg-1``, then the ``shlibs`` entry for this library could
840 say::
842     libz 1 zlib1g (>= 1:1.2.3.3.dfsg)
844 This version restriction must be new enough that any binary built
845 against the current version of the library will work with any version of
846 the shared library that satisfies that dependency.
848 As zlib1g also provides a udeb containing the shared library, there
849 would also be a second line::
851     udeb: libz 1 zlib1g-udeb (>= 1:1.2.3.3.dfsg)
853 .. _s8.6.4.3:
855 Providing a ``shlibs`` file
856 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
858 To provide a ``shlibs`` file for a shared library binary package, create
859 a ``shlibs`` file following the format described above and place it in
860 the ``DEBIAN`` directory for that package during the build. It will then
861 be included as a control file for that package.  [#]_
863 Since ``dpkg-shlibdeps`` reads the ``DEBIAN/shlibs`` files in all of the
864 binary packages being built from this source package, all of the
865 ``DEBIAN/shlibs`` files should be installed before ``dpkg-shlibdeps`` is
866 called on any of the binary packages.
868 .. [#] This is what ``dh_makeshlibs`` in the debhelper suite does. If your
869        package also has a udeb that provides a shared library,
870        ``dh_makeshlibs`` can automatically generate the ``udeb:`` lines if
871        you specify the name of the udeb with the ``--add-udeb`` option.