man-pages/de/man1/dpkg-gensymbols.1.html
2021-03-31 01:06:50 +01:00

637 lines
34 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML><HEAD><TITLE>Man page of dpkg-gensymbols</TITLE>
</HEAD><BODY>
<H1>dpkg-gensymbols</H1>
Section: dpkg-Programmsammlung (1)<BR>Updated: 2020-03-23<BR><A HREF="#index">Index</A>
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
<A NAME="lbAB">&nbsp;</A>
<H2>BEZEICHNUNG</H2>
dpkg-gensymbols - erstelle Symboldateien (Abh&auml;ngigkeitsinformationen f&uuml;r
Laufzeitbibliotheken)
<A NAME="lbAC">&nbsp;</A>
<H2>&Uuml;BERSICHT</H2>
<B>dpkg-gensymbols</B> [<I>Option</I> …]
<A NAME="lbAD">&nbsp;</A>
<H2>BESCHREIBUNG</H2>
<B>dpkg-gensymbols</B> durchsucht einen tempor&auml;ren Baubaum (standardm&auml;&szlig;ig
debian/tmp), sucht nach Bibliotheken und erstellt eine Datei <I>symbols</I>, die
diese beschreibt. Diese Datei wird, falls sie nicht leer ist, in das
Unterverzeichnis DEBIAN des Baubaums installiert, so dass sie schlussendlich
in der Steuerinformation des Pakets auftaucht.
<P>
Beim Erstellen dieser Dateien verwendet es als Eingabe einige vom Betreuer
bereitgestellte Symboldateien. Es sucht nach den folgenden Dateien (und
verwendet die erste, die gefunden wird):
<DL COMPACT>
<DT id="1">&bull;<DD>
debian/<I>Paket</I>.symbols.<I>Architektur</I>
<DT id="2">&bull;<DD>
debian/symbols.<I>Architektur</I>
<DT id="3">&bull;<DD>
debian/<I>Paket</I>.symbols
<DT id="4">&bull;<DD>
debian/symbols
</DL>
<P>
Der Hauptzweck dieser Dateien besteht darin, die minimale Version
bereitzustellen, die mit jedem von der Bibliothek bereitgestellten Symbol
verkn&uuml;pft ist. Normalerweise entspricht dies der ersten Version des Pakets,
die dieses Symbol bereitgestellt hat, kann aber vom Betreuer erh&ouml;ht werden,
falls die ABI des Symbols ohne Brechen der R&uuml;ckw&auml;rtskompatibilit&auml;t erweitert
wurde. Es liegt in der Verwantwortung des Betreuers, diese Dateien aktuell
zu halten, aber <B>dpkg-gensymbols</B> hilft dabei.
<P>
Wenn die erstellten Symboldateien sich von denen, die der Betreuer
bereitgestellt hat, unterscheiden, wird <B>dpkg-gensymbols</B> ein Diff zwischen
den zwei Versionen anzeigen. Falls die Unterschiede desweiteren zu
gravierend sind, wird es sogar fehlschlagen (Sie k&ouml;nnen einstellen, wie
gro&szlig;e Unterschiede Sie tolerieren k&ouml;nnen, sehen Sie hierzu die Option
<B>-c</B>).
<A NAME="lbAE">&nbsp;</A>
<H2>SYMBOLDATEIEN PFLEGEN</H2>
Die Symboldateien sind nur wirklich n&uuml;tzlich, falls sie die Entwicklung
eines Paketes &uuml;ber mehrere Ver&ouml;ffentlichungen hinweg wiedergeben. Daher muss
der Betreuer sie immer aktualisieren, wenn eine neues Symbol hinzugef&uuml;gt
wird, so dass die zugeordnete minimale Version der Realit&auml;t entspricht. Die
in den Bauprotokollen enthaltenen Diffs k&ouml;nnen als Startpunkt benutzt
werden, aber zus&auml;tzlich hat der Betreuer sicherzustellen, dass sich das
Verhalten dieser Symbole nicht derart ge&auml;ndert hat, dass irgendetwas, was
diese Symbole verwendet und gegen die neue Version gelinkt ist, daran
hindern w&uuml;rde, mit der alten Version zu funktionieren. Meistens kann der
Diff direkt auf die Datei debian/<I>Paket</I>.symbols angewandt
werden. Allerdings werden normalerweise weitere Anpassungen notwendig: es
wird beispielsweise empfohlen, die Debian-Revision von der minimalen Version
zu entfernen, so dass Backports mit einer niedrigeren Versionsnummer aber
der gleichen Version der Originalautoren immer noch die erstellten
Abh&auml;ngigkeiten erf&uuml;llen. Falls die Debian-Revision nicht entfernt werden
kann, da das Symbol wirklich von der Debian-spezifischen &Auml;nderung
hinzugef&uuml;gt wurde, dann sollte der Version bq<B>~</B>' angeh&auml;ngt werden.
<P>
Bevor irgendein Patch auf die Symboldatei angewendet wird, sollte der
Betreuer zweimal pr&uuml;fen, dass der Patch vern&uuml;nftig ist. &Ouml;ffentliche Symbole
sollten nicht verschwinden, daher sollte der Patch idealerweise nur neue
Zeilen hinzuf&uuml;gen.
<P>
Beachten Sie, dass Sie in Symboldateien Kommentare einf&uuml;gen k&ouml;nnen: jede
Zeile, die mit bq#' als ersten Zeichen beginnt, ist ein Kommentar, falls sie
nicht mit bq#include' beginnt (siehe Abschnitt <B>Includes
verwenden</B>). Zeilen, die mit bq#MISSING:' anfangen, sind besondere
Kommentare, die verschwundene Symbole dokumentieren.
<P>
Vergessen Sie nicht, zu &uuml;berpr&uuml;fen, ob alte Versionen aktualisiert werden
m&uuml;ssen. Es gibt f&uuml;r <B>dpkg-gensymbols</B> keine M&ouml;glichkeit, hierzu eine
Warnung auszugeben. Wird der Diff blind akzeptiert oder wird angenommen,
dass nichts ge&auml;ndert werden muss, wenn es keinen Diff gibt, ohne auf
&Auml;nderungen zu pr&uuml;fen, kann dies dazu f&uuml;hren, dass lockere Abh&auml;ngigkeiten
erzeugt werden, laut deren mit &auml;lteren Versionen gearbeitet werden kann,
obwohl dies nicht m&ouml;glich ist. Dies wird zu schwer zu findenden Fehlern bei
(teilweisen) Upgrades f&uuml;hren.
<A NAME="lbAF">&nbsp;</A>
<H3>Verwendung der #PACKAGE#-Ersetzung</H3>
<P>
In einigen seltenen F&auml;llen unterscheidet sich der Name der Bibliothek auf
verschiedenen Architekturen. Um zu vermeiden, dass der Paketname in der
Symboldatei fest kodiert wird, k&ouml;nnen Sie die Markierung <I>#PACKAGE#</I>
verwenden. W&auml;hrend der Installation der Symboldatei wird sie durch den
echten Paketnamen ersetzt. Anders als die Markierung <I>#MINVER#</I> wird
<I>#PACKAGE#</I> nie in der Symboldatei innerhalb eines Bin&auml;rpakets auftauchen.
<A NAME="lbAG">&nbsp;</A>
<H3>Verwendung von Symbolkennzeichnungen</H3>
<P>
Symbolkennzeichnungen sind n&uuml;tzlich, um Symbole zu markieren, die in
irgendeiner Weise besonders sind. Jedes Symbol kann eine beliebige Anzahl
zugeordneter Kennzeichnungen besitzen. W&auml;hrend alle Kennzeichnungen
ausgewertet und gespeichert werden, werden nur einige von <B>dpkg-gensymbols</B>
verstanden und l&ouml;sen eine Spezialbehandlung der Symbole aus. Lesen Sie den
Unterabschnit <B>Standardsymbolkennzeichnungen</B> f&uuml;r eine Referenz dieser
Kennzeichnungen.
<P>
Kennzeichnungsspezifikationen kommen direkt vor dem Symbolnamen (dazwischen
sind keine Leerraumzeichen erlaubt). Sie beginnen immer mit einer &ouml;ffnenden
Klammer <B>(</B>, enden mit einer schlie&szlig;enden Klammer <B>)</B> und m&uuml;ssen
mindestens eine Kennzeichnung enthalten. Mehrere Kennzeichnungen werden
durch das Zeichen <B>|</B> getrennt. Jede Kennzeichnungen kann optional einen
Wert enthalten, der von der Kennzeichnung durch das Zeichen <B>=</B> getrennt
wird. Kennzeichennamen und -werte k&ouml;nnen beliebige Zeichenketten sein, sie
d&uuml;rfen allerdings keine der der besonderen Zeichen <B>)</B> <B>|</B> <B>=</B>
enthalten. Symbolnamen, die einer Kennzeichnungsspezifikation folgen, k&ouml;nnen
optional mit den Zeichen <B>'</B> oder <B>&quot;</B> zitiert werden, um Leerraumzeichen
darin zu erlauben. Falls keine Kennzeichnungen f&uuml;r das Symbol spezifiziert
sind, werden Zitatzeichen als Teil des Symbolnamens behandelt, der bis zum
ersten Leerzeichen geht.
<P>
<BR>&nbsp;(Kennz1=bin&nbsp;markiert|Name&nbsp;mit&nbsp;Leerraum)&quot;zitiertes&nbsp;gekennz&nbsp;Symbol&quot;@Base&nbsp;1.0
<BR>&nbsp;(optional)<A HREF="mailto:gekennzeichnet_unzitiertes_Symbol@Base">gekennzeichnet_unzitiertes_Symbol@Base</A>&nbsp;1.0&nbsp;1
<BR>&nbsp;<A HREF="mailto:ungekennzeichnetes_Symbol@Base">ungekennzeichnetes_Symbol@Base</A>&nbsp;1.0
<P>
Das erste Symbol im Beispiel hei&szlig;t <I>zitiertes gekennz Symbol</I> und hat zwei
Kennzeichnungen: <I>Kennz1</I> mit dem Wert <I>bin markiert</I> und <I>Name mit
Leerraum</I> ohne Wert. Das zweite Symbol hei&szlig;t
<I>gekennzeichnet_unzitiertes_Symbol</I> und ist nur mit dem Kennzeichen namens
<I>optional</I> gekennzeichnet. Das letzte Symbol ist ein Beispiel eines
normalen, nicht gekennzeichneten Symbols.
<P>
Da Symbolkennzeichnungen eine Erweiterung des Formats <B><A HREF="/cgi-bin/man/man2html?5+deb-symbols">deb-symbols</A>(5)</B>
sind, k&ouml;nnen sie nur Teil der in Quellpaketen verwandten Symboldateien sein
(diese Dateien sollten dann als Vorlagen zum Bau der Symboldateien, die in
Bin&auml;rpakete eingebettet werden, gesehen werden). Wenn <B>dpkg-gensymbols</B>
ohne die Option <B>-t</B> aufgerufen wird, wird es alle Symbole ausgeben, die
zum Format <B><A HREF="/cgi-bin/man/man2html?5+deb-symbols">deb-symbols</A></B>(5) kompatibel sind: Es verarbeitet die Symbole
entsprechend der Anforderungen ihrer Standardkennzeichnungen und entfernt
alle Kennzeichnungen aus der Ausgabe. Im Gegensatz dazu werden alle Symbole
und ihre Kennzeichnungen (sowohl die Standardkennzeichnungen als auch die
unbekannten) im Vorlagenmodus (<B>-t</B>) in der Ausgabe beibehalten und in
ihrer Originalform wie sie geladen wurden auch geschrieben.
<A NAME="lbAH">&nbsp;</A>
<H3>Standard-Symbolkennzeichnungen</H3>
<DL COMPACT>
<DT id="5"><B>optional</B><DD>
Ein als &raquo;optional&laquo; gekennzeichnetes Symbol kann jederzeit von der Bibliothek
verschwinden und wird nie zum Fehlschlag von <B>dpkg-gensymbols</B>
f&uuml;hren. Verschwundene optionale Symbole werden kontinuierlich als MISSING
(Fehlend) in dem Diff in jeder neuen Paketversion auftauchen. Dieses
Verhalten dient als Erinnerung f&uuml;r den Betreuer, dass so ein Symbol aus der
Symboldatei entfernt oder wieder der Bibliothek hinzugef&uuml;gt werden
muss. Wenn das optionale Symbol, dass bisher als MISSING bezeichnet gewesen
war, pl&ouml;tzlich in der n&auml;chsten Version wieder auftaucht, wird es wieder auf
den Status Bqexisting" (existierend) gebracht, wobei die minimale Version
unver&auml;ndert bleibt.
<P>
Diese Markierung ist f&uuml;r private Symbole n&uuml;tzlich, deren Verschwinden keinen
ABI-Bruch ausl&ouml;st. Beispielsweise fallen die meisten
C++-Template-Instanziierungen in diese Kategorie. Wie jede andere Markierung
kann auch diese einen beliebigen Wert haben: sie k&ouml;nnte angeben, warum
dieses Symbol als optional betrachtet wird.
<DT id="6"><B>arch=</B><I>Architekturliste</I><DD>
<B>arch-bits=</B><I>Architektur-Bits</I>
<B>arch-endian=</B><I>Architektur-Endianness</I>
Diese Markierungen erlauben es, den Satz an Architekturen einzugrenzen, auf
denen das Symbol existieren sollte. Die Markierungen <B>arch-bits</B> und
<B>arch-endian</B> werden seit Dpkg 1.18.0 unterst&uuml;tzt. Wenn die Symbolliste mit
den in der Bibliothek entdeckten Symbolen aktualisiert wird, werden alle
architekturspezifischen Symbole, die nicht auf die aktuelle Host-Architektur
passen, so behandelt, als ob sie nicht existierten. Falls ein
architekturspezifisches Symbol, das auf die aktuelle Host-Architektur passt,
in der Bibliothek nicht existiert, werden die normalen Regeln f&uuml;r fehlende
Symbole angewandt und <B>dpkg-gensymbols</B> k&ouml;nnte dadurch fehlschlagen. Auf
der anderen Seite, falls das architekturspezifische Symbol gefunden wurde,
wenn es nicht existieren sollte (da die aktuelle Host-Architektur nicht in
der Markierung aufgef&uuml;hrt ist oder nicht auf die Endianess und Bits passt),
wird sie architekturneutral gemacht (d.h. die Architektur-,
Architektur-Bits- und Architektur-Endianessmarkierungen werden entfernt und
das Symbol wird im Diff aufgrund dieser &Auml;nderung auftauchen), aber es wird
nicht als neu betrachtet.
<P>
Beim Betrieb im standardm&auml;&szlig;igen nicht-Vorlagen-Modus werden unter den
architekturspezifischen Symbolen nur die in die Symboldatei geschrieben, die
auf die aktuelle Host-Architektur passen. Auf der anderen Seite werden beim
Betrieb im Vorlagenmodus alle architekturspezifischen Symbole (darunter auch
die von fremden Architekturen) immer in die Symboldatei geschrieben.
<P>
Das Format der <I>Architekturliste</I> ist das gleiche wie das des Feldes
<B>Build-Depends</B> in <I>debian/control</I> (au&szlig;er den einschlie&szlig;enden eckigen
Klammern []). Beispielsweise wird das erste Symbol aus der folgenden Liste
nur auf den Architekturen Alpha, Any-amd64 und Ia64 betrachtet, das zweite
nur Linux-Architekturen, w&auml;hrend das dritte &uuml;berall au&szlig;er auf Armel
betrachtet wird.
<P>
<BR>&nbsp;(arch=alpha&nbsp;any-amd64&nbsp;ia64)<A HREF="mailto:64bit_specific_symbol@Base">64bit_specific_symbol@Base</A>&nbsp;1.0
<BR>&nbsp;(arch=linux-any)<A HREF="mailto:linux_specific_symbol@Base">linux_specific_symbol@Base</A>&nbsp;1.0
<BR>&nbsp;(arch=!armel)<A HREF="mailto:symbol_armel_does_not_have@Base">symbol_armel_does_not_have@Base</A>&nbsp;1.0
<P>
<I>architecture-bits</I> ist entweder <B>32</B> oder <B>64</B>.
<P>
<BR>&nbsp;(arch-bits=32)<A HREF="mailto:32bit_specific_symbol@Base">32bit_specific_symbol@Base</A>&nbsp;1.0
<BR>&nbsp;(arch-bits=64)<A HREF="mailto:64bit_specific_symbol@Base">64bit_specific_symbol@Base</A>&nbsp;1.0
<P>
<I>architecture-endianness</I> ist entweder <B>little</B> oder <B>big</B>.
<P>
<BR>&nbsp;(arch-endian=little)<A HREF="mailto:little_endian_specific_symbol@Base">little_endian_specific_symbol@Base</A>&nbsp;1.0
<BR>&nbsp;(arch-endian=big)<A HREF="mailto:big_endian_specific_symbol@Base">big_endian_specific_symbol@Base</A>&nbsp;1.0
<P>
Mehrere Einschr&auml;nkungen k&ouml;nnen aneinandergeh&auml;ngt werden.
<P>
<BR>&nbsp;(arch-bits=32|arch-endian=little)<A HREF="mailto:32bit_le_symbol@Base">32bit_le_symbol@Base</A>&nbsp;1.0
<DT id="7"><B>ignore-blacklist</B><DD>
dpkg-gensymbols verf&uuml;gt &uuml;ber eine interne Ausschu&szlig;liste (&raquo;blacklist&laquo;) von
Symbolen, die nicht in Symboldateien auftauchen sollten, da sie
normalerweise nur Seiteneffekte von Implementierungsdetails in der
Werkzeugkette darstellen. Falls Sie aus irgendeinem Grund wollen, dass diese
Symbole in der Symboldatei aufgenommen werden, sollten Sie das Symbol mit
<B>ignore-blacklist</B> kennzeichnen. Dies kann f&uuml;r einige grundlegende
Bibliotheken der Werkzeugkette wie libgcc notwendig sein.
<DT id="8"><B>c++</B><DD>
Gibt <I>c++</I>-Symbolmuster an. Lesen Sie den Unterabschnitt <B>Verwendung von
Symbolmuster</B> unten.
<DT id="9"><B>symver</B><DD>
Gibt <I>symver</I> (Symbolversion)-Symbolmuster an. Lesen Sie den Unterabschnitt
<B>Verwendung von Symbolmuster</B> unten.
<DT id="10"><B>regex</B><DD>
Gibt <I>regex</I>-Symbolmuster an. Lesen Sie den Unterabschnitt <B>Verwendung von
Symbolmuster</B> unten.
</DL>
<A NAME="lbAI">&nbsp;</A>
<H3>Verwendung von Symbolmustern</H3>
<P>
Anders als die Standardsymbolspezifikation kann ein Muster mehrere reale
Symbole aus der Bibliothek abdecken. <B>dpkg-gensymbols</B> wird versuchen,
jedes Muster auf jedes reale Symbol, f&uuml;r das <I>kein</I> spezifisches
Symbolgegenst&uuml;ck in der Symboldatei definiert ist, zu passen. Wann immer das
erste passende Muster gefunden wurde, werden alle Kennzeichnungen und
Eigenschaften als Basisspezifikation des Symbols verwandt. Falls keines der
Muster passt, wird das Symbol als neu betrachtet.
<P>
Ein Muster wird als verloren betrachtet, falls es auf kein Symbol in der
Bibliothek passt. Standardm&auml;&szlig;ig wird dies ein Versagen von
<B>dpkg-gensymbols</B> in der Stufe <B>-c1</B> oder h&ouml;her ausl&ouml;sen. Falls der
Fehlschlag allerdings unerw&uuml;nscht ist, kann das Muster mit der Kennzeichnung
<I>optional</I> markiert werden. Falls das Muster dann auf nichts passt wird es
im Diff nur als MISSING (fehlend) auftauchen. Desweiteren kann das Muster
wie jedes Symbol auf die spezielle Architektur mit der Kennzeichnung <I>arch</I>
beschr&auml;nkt werden. Bitte lesen Sie den Unterabschnitt <B>Standard
Symbolkennzeichnungen</B> oben f&uuml;r weitere Informationen.
<P>
Muster sind eine Erweiterung des Formats <B><A HREF="/cgi-bin/man/man2html?5+deb-symbols">deb-symbols</A></B>(5); sie sind daher
nur in Symboldatei-Vorlagen g&uuml;ltig. Die Musterspezifikationssyntax
unterscheidet sich nicht von der eines spezifischen Symbols. Allerdings
dient der Symbolnamenteil der Spezifikation als Ausdruck, der gegen
<I><A HREF="mailto:Name@Version">Name@Version</A></I> eines realen Symbols gepasst wird. Um zwischen den
verschiedenen Mustertypen zu unterscheiden, wird es typischerweise mit einer
speziellen Kennzeichnung gekennzeichnet.
<P>
Derzeit unterst&uuml;tzt <B>dpkg-gensymbols</B> drei grundlegene Mustertypen:
<DL COMPACT>
<DT id="11"><B>c++</B><DD>
Dieses Muster wird durch die Kennzeichnung <I>c++</I> verzeichnet. Es passt nur
auf die entworrenen (&raquo;demangled&laquo;) Symbolnamen (wie sie vom Hilfswerkzeug
<B>c++<A HREF="/cgi-bin/man/man2html?1+filt">filt</A></B>(1) ausgegeben werden). Dieses Muster ist sehr hilfreich um auf
Symbole zu passen, bei dem die verworrenen (&raquo;mangled&laquo;) Namen sich auf
verschiedenen Architekturen unterscheiden w&auml;hrend die entworrenen die
gleichen bleiben. Eine Gruppe solcher Symbole ist <I>non-virtual thunks</I>, die
einen architekturspezifischen Versatz in ihren verworrenen Namen eingebettet
haben. Eine h&auml;ufige Instanz dieses Falles ist ein virtueller Destruktur, der
unter rautenf&ouml;rmiger Vererbung ein nicht-virtuelles Thunk-Symbol
ben&ouml;tigt. Selbst wenn beispielsweise <A HREF="mailto:_ZThn8_N3NSB6ClassDD1Ev@Base">_ZThn8_N3NSB6ClassDD1Ev@Base</A> auf 32
Bit-Architekturen <A HREF="mailto:_ZThn16_N3NSB6ClassDD1Ev@Base">_ZThn16_N3NSB6ClassDD1Ev@Base</A> auf 64 Bit-Architekturen
ist, kann es mit einem einzigen <I>c++</I>-Muster gepasst werden:
<P>
libdummy.so.1 libdummy1 #MINVER#
<BR>&nbsp;[…]
<BR>&nbsp;(c++)&quot;non-virtual&nbsp;thunk&nbsp;to&nbsp;NSB::ClassD::~ClassD()@Base&quot;&nbsp;1.0
<BR>&nbsp;[…]
<P>
Der entworrene Name oben kann durch Ausf&uuml;hrung folgenden Befehls erhalten
werden:
<P>
<BR>&nbsp;$&nbsp;echo&nbsp;'<A HREF="mailto:_ZThn8_N3NSB6ClassDD1Ev@Base">_ZThn8_N3NSB6ClassDD1Ev@Base</A>'&nbsp;|&nbsp;c++filt
<P>
Bitte beachten Sie, dass per Definition zwar der verworrene Name in der
Bibliothek eindeutig ist, die aber nicht notwendigerweise f&uuml;r die
entworrenen Namen zutrifft. Ein Satz von unterschiedlichen realen Symbolen
k&ouml;nnen den gleichen entworrenen Namen haben. Beispielsweise ist das der Fall
bei nicht-virtuellen Thunk-Symbolen in komplexen Vererbungskonfigurationen
oder bei den meisten Konstruktoren und Destruktoren (da g++ typischerweise
zwei reale Symbole f&uuml;r sie generiert). Da diese Kollisionen aber auf dem
ABI-Niveau passieren, sollten sie nicht die Qualit&auml;t der Symboldatei
reduzieren.
<DT id="12"><B>symver</B><DD>
Dieses Muster wird durch die Kennzeichnung <I>symver</I> verzeichnet. Gut
betreute Bibliotheken verf&uuml;gen &uuml;ber versionierte Symbole, wobei jede Version
zu der Version der Originalautoren passt, in der dieses Symbol hinzugef&uuml;gt
wurde. Falls das der Fall ist, k&ouml;nnen SIe ein <I>symver</I>-Muster verwenden, um
auf jedes zu einer spezifizierten Version zugeordnete Symbol zu
passen. Beispiel:
<P>
libc.so.6 libc6 #MINVER#
<BR>&nbsp;(symver)GLIBC_2.0&nbsp;2.0
<BR>&nbsp;[…]
<BR>&nbsp;(symver)GLIBC_2.7&nbsp;2.7
<BR>&nbsp;<A HREF="mailto:access@GLIBC_2.0">access@GLIBC_2.0</A>&nbsp;2.2
<P>
Alle Version GLIBC_2.0 und GLIBC_2.7 zugeordneten Symbole werden zu einer
minimalen Version 2.0 bzw. 2.7 f&uuml;hren, wobei das Symbol <A HREF="mailto:access@GLIBC_2.0">access@GLIBC_2.0</A> die
Ausnahme darstellt. Es wird zu einer minimalen Abh&auml;ngigkeit auf libc6
Version 2.2 f&uuml;hren, obwohl es im Geltungsbereich des Musters
&raquo;(symver)GLIBC_2.0&laquo; passt, da spezielle Symbole vor Mustern Vorrang haben.
<P>
Bitte beachten Sie, dass Platzhaltermuster im alten Format (angezeigt durch
&raquo;*@version&laquo; im Symbolnamenfeld) zwar noch unterst&uuml;tzt werden, sie aber durch
die Syntax im neuen Format &raquo;(symver|optional)version&laquo; abgel&ouml;st
wurden. Beispielsweise sollte &raquo;*@GLIBC_2.0 2.0&laquo; als
&raquo;(symver|optional)GLIBC_2.0 2.0&laquo; geschrieben werden, falls das gleiche
Verhalten ben&ouml;tigt wird.
<DT id="13"><B>regex</B><DD>
Muster mit regul&auml;ren Ausdr&uuml;cken werden durch die Kennzeichnung <I>regex</I>
verzeichnet. Sie passen auf den regul&auml;ren Ausdruck von Perl, der im
Symbolnamenfeld angegeben ist. Ein regul&auml;rer Ausdruck wird wie er ist
gepasst. Denken Sie daher daran, ihn mit dem Zeichen <I>^</I> zu beginnen, da er
ansonsten auf jeden Teil der Zeichenkette des realen Symbols <I><A HREF="mailto:name@version">name@version</A></I>
passt. Beispiel:
<P>
libdummy.so.1 libdummy1 #MINVER#
<BR>&nbsp;(regex)&quot;^mystack_.*@Base$&quot;&nbsp;1.0
<BR>&nbsp;(regex|optional)&quot;private&quot;&nbsp;1.0
<P>
Symbole wie &raquo;<A HREF="mailto:mystack_new@Base">mystack_new@Base</A>&laquo;, &raquo;<A HREF="mailto:mystack_push@Base">mystack_push@Base</A>&laquo;, &raquo;<A HREF="mailto:mystack_pop@Base">mystack_pop@Base</A>&laquo;
usw. werden vom ersten Muster gepasst, w&auml;hrend dies z.B. f&uuml;r
&raquo;<A HREF="mailto:ng_mystack_new@Base">ng_mystack_new@Base</A>&laquo; nicht der Fall ist. Das zweite Muster wird auf alle
Symbole, die die Zeichenkette &raquo;private&laquo; in ihren Namen enthalten, passen und
die gepassten Symbole erben die Kennzeichnung <I>optional</I> vom Muster.
</DL>
<P>
Die oben aufgef&uuml;hrten grundlegenden Muster k&ouml;nnen - wo es Sinn ergibt -
kombiniert werden. In diesem Fall werden sie in der Reihenfolge verarbeitet,
in der die Kennzeichnungen angegeben sind. Im Beispiel
<P>
<BR>&nbsp;(c++|regex)&quot;^NSA::ClassA::Private::privmethod\d\(int\)@Base&quot;&nbsp;1.0
<BR>&nbsp;(regex|c++)N3NSA6ClassA7Private11privmethod\<A HREF="mailto:dEi@Base">dEi@Base</A>&nbsp;1.0
<P>
werden die Symbole &raquo;<A HREF="mailto:_ZN3NSA6ClassA7Private11privmethod1Ei@Base">_ZN3NSA6ClassA7Private11privmethod1Ei@Base</A>&laquo; und
&raquo;<A HREF="mailto:_ZN3NSA6ClassA7Private11privmethod2Ei@Base">_ZN3NSA6ClassA7Private11privmethod2Ei@Base</A>&laquo; gepasst. Beim Passen der ersten
Musters wird das rohe Symbol erst als C++-Symbol entworren, dann wird der
entworrende Name gegen den regul&auml;ren Ausdruck gepasst. Auf der anderen Seite
wird beim Passen des zweiten Musters der regul&auml;re Ausdruck gegen den rohen
Symbolnamen gepasst, dann wird das Symbol &uuml;berpr&uuml;ft, ob es ein C++-Symbol
ist, indem das Entwirren versucht wird. Ein Fehlschlag eines einfachen
Musters wird zum Fehlschlag des gesamten Musters f&uuml;hren. Daher wird
beispielsweise &raquo;__N3NSA6ClassA7Private11privmethod\<A HREF="mailto:dEi@Base">dEi@Base</A>&laquo; keines der
Muster passen, da es kein g&uuml;ltiges C++-Symbol ist.
<P>
Im Allgemeinen werden die Muster in zwei Kategorien eingeteilt: Aliase
(grundlegende <I>c++</I>- und <I>symver</I>-Muster) und generische Muster (<I>regex</I>
und alle Kombinationen grundlegender Muster). Passen von grundlegenden
alias-basierenden Mustern ist schnell (<A HREF="/cgi-bin/man/man2html?1+O">O</A>(1)), w&auml;hrend generische Muster O(N)
(wobei N die Anzahl der generischen Muster ist) f&uuml;r jedes Symbol ist. Daher
wird empfohlen, generische Muster nicht zu viel zu verwenden.
<P>
Wenn mehrere Muster auf das gleiche Symbol passen, werden Aliase (zuerst
<I>c++</I>, dann <I>symver</I>) gegen&uuml;ber den generischen Mustern
bevorzugt. Generische Muster werden in der Reihenfolge, in der sie in der
Symboldateivorlage gefunden werden, gepasst, bis zum ersten Erfolg. Beachten
Sie aber, dass das manuelle Anordnen der Vorlagendateieintr&auml;ge nicht
empfohlen wird, da <B>dpkg-gensymbols</B> Diffs basierend auf der
alphanumerischen Reihenfolge ihrer Namen erstellt.
<A NAME="lbAJ">&nbsp;</A>
<H3>Includes verwenden</H3>
<P>
Wenn der Satz der exportierten Symbolen sich zwischen Architekturen
unterscheidet, kann es ineffizient werden, eine einzige Symboldatei zu
verwenden. In diesen F&auml;llen kann sich eine Include-Direktive in einer Reihe
von Arten als n&uuml;tzlich erweisen:
<DL COMPACT>
<DT id="14">&bull;<DD>
Sie k&ouml;nnen den gemeinsamen Teil in eine externe Datei auslagern und diese
Datei dann in Ihre <I>Paket</I>.symbols.<I>Arch</I>-Datei mit einer
include-Direktive wie folgt einbinden:
<P>
#include &quot;<I>Pakete</I>.symbols.common&quot;
<DT id="15">&bull;<DD>
Die Include-Direktive kann auch wie jedes Symbol gekennzeichnet werden:
<P>
(Kennzeichen|…|KennzeichenN)#include &quot;einzubindende-Datei&quot;
<P>
Als Ergebnis werden alle Symbole aus <I>einzubindende-Datei</I> standardm&auml;&szlig;ig
als mit <I>Kennzeichen</I><I>KennzeichenN</I> gekennzeichnet betrachtet. Sie
k&ouml;nnen diese Funktionalit&auml;t benutzen, um eine gemeinsame Datei
<I>Paket</I>.symbols zu erstellen, die architekturspezifische Symboldateien
einbindet:
<P>
<BR>&nbsp;&nbsp;<A HREF="mailto:common_symbol1@Base">common_symbol1@Base</A>&nbsp;1.0
<BR>&nbsp;(arch=amd64&nbsp;ia64&nbsp;alpha)#include&nbsp;&quot;Paket.symbols.64bit&quot;
<BR>&nbsp;(arch=!amd64&nbsp;!ia64&nbsp;!alpha)#include&nbsp;&quot;Paket.symbols.32bit&quot;
<BR>&nbsp;&nbsp;<A HREF="mailto:common_symbol2@Base">common_symbol2@Base</A>&nbsp;1.0
</DL>
<P>
Die Symboldateien werden Zeile f&uuml;r Zeile gelesen und include-Direktiven
werden bearbeitet, sobald sie erkannt werden. Das bedeutet, dass der Inhalt
der Include-Datei jeden Inhalt &uuml;berschreiben kann, der vor der
Include-Direktive aufgetaucht ist und Inhalt nach der Direktive alles aus
der Include-Datei &uuml;berschreiben kann. Jedes Symbol (oder sogar weitere
#include-Direktiven) in der Include-Datei kann zus&auml;tzliche Kennzeichnungen
spezifizieren oder Werte der vererbtgen Kennzeichnungen in ihrer
Kennzeichnungsspezifikation &uuml;berschreiben. Allerdings gibt es keine
M&ouml;glichkeit f&uuml;r ein Symbol, die ererbten Kennzeichnungen zu &uuml;berschreiben.
<P>
Eine eingebundene Datei kann die Kopfzeile wiederholen, die den SONAME der
Bibliothek enth&auml;lt. In diesem Fall &uuml;berschreibt sie jede vorher gelesene
Kopfzeile. Allerdings ist es im Allgemeinen am Besten, die Wiederholung von
Kopfzeilen zu vermeiden. Ein Weg dies zu erreichen, ist wie folgt:
<P>
#include &quot;libirgendwas1.symbols.common&quot;
<BR>&nbsp;<A HREF="mailto:arch_spezifisches_Symbol@Base">arch_spezifisches_Symbol@Base</A>&nbsp;1.0
<A NAME="lbAK">&nbsp;</A>
<H3>Gute Bibliotheksverwaltung</H3>
<P>
Eine gut verwaltete Bibliothek hat die folgenden Eigenschaften:
<DL COMPACT>
<DT id="16">&bull;<DD>
seine API ist stabil (&ouml;ffentliche Symbole entfallen nie, nur neue
&ouml;ffentliche Symbole werden hinzugef&uuml;gt) und inkompatible &Auml;nderungen erfolgen
nur, wenn sich der SONAME &auml;ndert,
<DT id="17">&bull;<DD>
idealerweise verwendet sie Symbolversionierung, um ABI-Stabilit&auml;t trotz
interner &Auml;nderungen und API-Erweiterungen zu erreichen,
<DT id="18">&bull;<DD>
sie exportiert nie private Symbole (als Hilfsl&ouml;sung k&ouml;nnen diese als
optional gekennzeichnet werden).
</DL>
<P>
Bei der Verwaltung der Symboldatei kann das Auftauchen und Verschwinden von
Symbolen leicht bemerkt werden. Es ist aber schwieriger, inkompatbile API-
und ABI-&Auml;nderungen zu bemerken. Daher sollte der Betreuer intensiv die
Changelog-Eintr&auml;ge durchschauen und nach F&auml;llen suchen, in denen die Regeln
der guten Bibliotheksverwaltung gebrochen wurden. Falls m&ouml;gliche Probleme
entdeckt wurden, sollten der Originalautor informiert werden, da eine
Korrektur vom Originalautor immer besser als eine Debian-spezifische
Hilfsl&ouml;sung ist.
<A NAME="lbAL">&nbsp;</A>
<H2>OPTIONEN</H2>
<DL COMPACT>
<DT id="19"><B>-P</B><I>Paketbauverzeichnis</I><DD>
Suche nach <I>Paketbauverzeichnis</I> statt nach debian/tmp.
<DT id="20"><B>-p</B><I>Paket</I><DD>
Definiert den Paketnamen. Ben&ouml;tigt, falls mehr als ein bin&auml;res Paket in
debian/control aufgef&uuml;hrt ist (oder falls es keine Datei debian/control
gibt).
<DT id="21"><B>-v</B><I>Version</I><DD>
Definiert die Paketversion. Standardm&auml;&szlig;ig wird die Version aus
debian/changelog entnommen. Ben&ouml;tigt, falls der Aufruf au&szlig;erhalb des
Quellpaketbaums erfolgt.
<DT id="22"><B>-e</B><I>Bibliotheksdatei</I><DD>
Nur die explizit aufgef&uuml;hrten Bibliotheken untersuchen statt alle
&ouml;ffentlichen Bibliotheken zu finden. Sie k&ouml;nnen Shell-Muster, die zur
Expansion von Pfadnamen verwandt werden (siehe die Handbuchseite
<B>File::Glob</B>(3perl) f&uuml;r weitere Details) in <I>Bibliotheksdatei</I> verwenden,
um mehrere Bibliotheken mit einem einzelnen Argument zu passen (andernfalls
ben&ouml;tigen Sie mehrere <B>-e</B>).
<DT id="23"><B>-l</B><I>Verzeichnis</I><DD>
Stellt <I>Verzeichnis</I> der Liste der zu durchsuchenden privaten
Laufzeitbibliotheken voran (seit Dpkg 1.19.1). Diese Option kann mehrfach
angegeben werden.
<P>
Hinweis: Verwenden Sie diese Variable, statt <B>LD_LIBRARY_PATH</B> zu setzten,
da diese Umgebungsvariable verwandt wird, um den Laufzeit-Linker zu steuern
und ihr Missbrauch zum Setzen von Pfaden zu Laufzeitbibliotheken zur Bauzeit
kann beispielsweise beim Cross-&Uuml;bersetzen problematisch werden.
<DT id="24"><B>-I</B><I>Dateiname</I><DD>
Verwende <I>Dateiname</I> als Referenzdatei, um die Symboldatei zu erstellen,
die dann im Paket selbst integriert wird.
<DT id="25"><B>-O</B>[<I>Dateiname</I>]<DD>
Die erstellte Symbols-Datei auf die Standardausgabe oder nach <I>Dateiname</I>,
falls angegeben, ausgeben statt in <B>debian/tmp/DEBIAN/symbols</B> (oder
<I>Paket-Bauverzeichnis</I><B>/DEBIAN/symbols</B> falls <B>-P</B> verwandt wurde). Falls
<I>Dateiname</I> bereits existiert, wird deren Inhalt als Grundlage f&uuml;r die
erstellte Symboldatei verwandt. Sie k&ouml;nnen diese Funktionalit&auml;t benutzen, um
eine Symboldatei zu aktualisieren, so dass sie zu einer neueren Version der
Originalautoren Ihrer Bibliothek passt.
<DT id="26"><B>-t</B><DD>
Schreibe die Symboldatei im Vorlagenmodus statt im zu <B><A HREF="/cgi-bin/man/man2html?5+deb-symbols">deb-symbols</A></B>(5)
kompatiblen Format. Der Hauptunterschied besteht darin, dass im
Vorlagenmodus die Symbolnamen und Kennzeichnungen in ihrer Originalform
geschrieben werden, im Gegensatz zu den verarbeiteten Symbolnamen mit
entfernen Kennzeichnungen im Kompatibilit&auml;tsmodus. Desweiteren k&ouml;nnten
einige Symbole beim Schreiben einer Standard <B><A HREF="/cgi-bin/man/man2html?5+deb-symbols">deb-symbols</A></B>(5)-Datei
entfernt werden (gem&auml;&szlig; der Verarbeitungsregeln f&uuml;r Kennzeichen), w&auml;hrend in
der Symboldateivorlage immer alle Symbole geschrieben werden.
<DT id="27"><B>-c</B><I>[0-4]</I><DD>
Definiert die Pr&uuml;fungen, die beim Vergleich der erstellten Symboldatei mit
der Vorlagendatei als Startpunkt erfolgen sollen. Standardstufe ist
1. Zunehmende Stufen f&uuml;hren mehr Pr&uuml;fungen durch und enthalten alle
Pr&uuml;fungen der niedrigeren Stufen. Stufe 0 schl&auml;gt nie fehl. Stufe 1 schl&auml;gt
fehl, wenn einige Symbole verschwunden sind. Stufe 2 schl&auml;gt fehlt, falls
einige neue Symbole eingef&uuml;hrt wurden. Stufe 3 schl&auml;gt fehl, falls einige
Bibliotheken verschwunden sind. Stufe 4 schl&auml;gt fehl, falls einige
Bibliotheken hinzugekommen sind.
<P>
Dieser Wert kann von der Umgebungsvariablen <B>DPKG_GENSYMBOLS_CHECK_LEVEL</B>
au&szlig;er Kraft gesetzt werden.
<DT id="28"><B>-q</B><DD>
Ruhig verhalten und nie einen Diff zwischen der erstellten Symboldatei und
der als Startpunkt verwandten Vorlagendatei erstellen oder keine Warnungen
bez&uuml;glich neuer/verlorender Bibliotheken oder neuer/verlorender Symbole
ausgeben. Diese Option deaktiviert nur die informative Ausgabe aber nicht
die Pr&uuml;fungen selbst (sehen Sie hierzu die Option <B>-c</B>).
<DT id="29"><B>-a</B><I>Architektur</I><DD>
Nehme <I>Arch</I> als Host-Architektur beim Verarbeiten der Symboldateien
an. Verwenden Sie diese Option, um Symboldateien oder Diffs f&uuml;r beliebige
Architekturen zu erstellen, vorausgesetzt, die Bin&auml;rprogramme sind bereits
verf&uuml;gbar.
<DT id="30"><B>-d</B><DD>
Debug-Modus aktivieren. Eine Vielzahl von Nachrichten wird angezeigt, um zu
erkl&auml;ren, was <B>dpkg-gensymbols</B> durchf&uuml;hrt.
<DT id="31"><B>-V</B><DD>
Ausf&uuml;hrlichen Modus aktivieren. Die erstellte Symboldatei enth&auml;lt veraltete
Symbole als Kommentare. Im Vorlagenmodus werden Mustersymbole desweiteren
von Kommentaren gefolgt, die die echten Symbole auff&uuml;hren, die auf dieses
Muster passen.
<DT id="32"><B>-?</B>, <B>--help</B><DD>
Zeige den Bedienungshinweis und beende.
<DT id="33"><B>--version</B><DD>
Gebe die Version aus und beende sich.
</DL>
<A NAME="lbAM">&nbsp;</A>
<H2>UMGEBUNG</H2>
<DL COMPACT>
<DT id="34"><B>DPKG_GENSYMBOLS_CHECK_LEVEL</B><DD>
Setzt die Befehls&uuml;berpr&uuml;fungsstufe au&szlig;er Kraft, selbst wenn das
Befehlszeilenargument <B>-c</B> &uuml;bergeben wurde (beachten Sie, dass dies der
&uuml;blichen Konvention widerspricht, demnach Befehlszeilenargumente Vorrang
&uuml;ber Umgebungsvariablen haben).
<DT id="35"><B>DPKG_COLORS</B><DD>
Setzt den Farbmodus (seit Dpkg 1.18.5). Die derzeit unterst&uuml;tzten Werte
sind: <B>auto</B> (Vorgabe), <B>always</B> und <B>never</B>.
<DT id="36"><B>DPKG_NLS</B><DD>
Falls dies gesetzt ist, wird es zur Entscheidung, ob Native Language
Support, auch als Internationalisierung (oder i18n) Unterst&uuml;tzung bekannt,
aktiviert wird (seit Dpkg 1.19.0). Die akzeptierten Werte sind: <B>0</B> und
<B>1</B> (Vorgabe).
</DL>
<A NAME="lbAN">&nbsp;</A>
<H2>SIEHE AUCH</H2>
<B><A HREF="https://people.redhat.com/drepper/symbol-versioning">https://people.redhat.com/drepper/symbol-versioning</A></B>
<BR>
<B><A HREF="https://people.redhat.com/drepper/goodpractice.pdf">https://people.redhat.com/drepper/goodpractice.pdf</A></B>
<BR>
<B><A HREF="https://people.redhat.com/drepper/dsohowto.pdf">https://people.redhat.com/drepper/dsohowto.pdf</A></B>
<BR>
<B><A HREF="/cgi-bin/man/man2html?5+deb-symbols">deb-symbols</A></B>(5), <B><A HREF="/cgi-bin/man/man2html?1+dpkg-shlibdeps">dpkg-shlibdeps</A></B>(1).
<A NAME="lbAO">&nbsp;</A>
<H2>&Uuml;BERSETZUNG</H2>
Die deutsche &Uuml;bersetzung wurde 2004, 2006-2019 von Helge Kreutzmann
&lt;<A HREF="mailto:debian@helgefjell.de">debian@helgefjell.de</A>&gt;, 2007 von Florian Rehnisch &lt;<A HREF="mailto:eixman@gmx.de">eixman@gmx.de</A>&gt; und
2008 von Sven Joachim &lt;<A HREF="mailto:svenjoac@gmx.de">svenjoac@gmx.de</A>&gt;
angefertigt. Diese &Uuml;bersetzung ist Freie Dokumentation; lesen Sie die
GNU General Public License Version 2 oder neuer f&uuml;r die Kopierbedingungen.
Es gibt KEINE HAFTUNG.
<P>
<HR>
<A NAME="index">&nbsp;</A><H2>Index</H2>
<DL>
<DT id="37"><A HREF="#lbAB">BEZEICHNUNG</A><DD>
<DT id="38"><A HREF="#lbAC">&Uuml;BERSICHT</A><DD>
<DT id="39"><A HREF="#lbAD">BESCHREIBUNG</A><DD>
<DT id="40"><A HREF="#lbAE">SYMBOLDATEIEN PFLEGEN</A><DD>
<DL>
<DT id="41"><A HREF="#lbAF">Verwendung der #PACKAGE#-Ersetzung</A><DD>
<DT id="42"><A HREF="#lbAG">Verwendung von Symbolkennzeichnungen</A><DD>
<DT id="43"><A HREF="#lbAH">Standard-Symbolkennzeichnungen</A><DD>
<DT id="44"><A HREF="#lbAI">Verwendung von Symbolmustern</A><DD>
<DT id="45"><A HREF="#lbAJ">Includes verwenden</A><DD>
<DT id="46"><A HREF="#lbAK">Gute Bibliotheksverwaltung</A><DD>
</DL>
<DT id="47"><A HREF="#lbAL">OPTIONEN</A><DD>
<DT id="48"><A HREF="#lbAM">UMGEBUNG</A><DD>
<DT id="49"><A HREF="#lbAN">SIEHE AUCH</A><DD>
<DT id="50"><A HREF="#lbAO">&Uuml;BERSETZUNG</A><DD>
</DL>
<HR>
This document was created by
<A HREF="/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 00:04:56 GMT, March 31, 2021
</BODY>
</HTML>