Provided by: dpkg-dev_1.19.7ubuntu3.2_all bug

BEZEICHNUNG

       dpkg-gensymbols - erstelle Symboldateien (Abhängigkeitsinformationen für Laufzeitbibliotheken)

ÜBERSICHT

       dpkg-gensymbols [Option …]

BESCHREIBUNG

       dpkg-gensymbols  durchsucht  einen temporären Baubaum (standardmäßig debian/tmp), sucht nach Bibliotheken
       und erstellt eine Datei symbols, 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.

       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):

       •   debian/Paket.symbols.Architektur

       •   debian/symbols.Architektur

       •   debian/Paket.symbols

       •   debian/symbols

       Der Hauptzweck dieser Dateien besteht darin, die minimale Version bereitzustellen, die mit jedem von  der
       Bibliothek  bereitgestellten  Symbol  verknüpft ist. Normalerweise entspricht dies der ersten Version des
       Pakets, die dieses Symbol bereitgestellt hat, kann aber vom Betreuer erhöht werden,  falls  die  ABI  des
       Symbols  ohne  Brechen  der  Rückwärtskompatibilität  erweitert wurde. Es liegt in der Verwantwortung des
       Betreuers, diese Dateien aktuell zu halten, aber dpkg-gensymbols hilft dabei.

       Wenn die erstellten Symboldateien sich von denen, die der  Betreuer  bereitgestellt  hat,  unterscheiden,
       wird dpkg-gensymbols ein Diff zwischen den zwei Versionen anzeigen. Falls die Unterschiede desweiteren zu
       gravierend sind, wird es sogar fehlschlagen (Sie können einstellen, wie große Unterschiede Sie tolerieren
       können, sehen Sie hierzu die Option -c).

SYMBOLDATEIEN PFLEGEN

       Die  Symboldateien  sind  nur  wirklich  nützlich,  falls  sie die Entwicklung eines Paketes über mehrere
       Veröffentlichungen hinweg wiedergeben. Daher muss der Betreuer sie immer aktualisieren, wenn  eine  neues
       Symbol  hinzugefügt  wird,  so  dass die zugeordnete minimale Version der Realität entspricht. Die in den
       Bauprotokollen enthaltenen Diffs können als Startpunkt benutzt werden, aber zusätzlich hat  der  Betreuer
       sicherzustellen,  dass sich das Verhalten dieser Symbole nicht derart geändert hat, dass irgendetwas, was
       diese Symbole verwendet und gegen die neue Version gelinkt  ist,  daran  hindern  würde,  mit  der  alten
       Version  zu  funktionieren.  Meistens  kann  der Diff direkt auf die Datei debian/Paket.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ängigkeiten
       erfüllen.  Falls  die  Debian-Revision  nicht  entfernt  werden  kann,  da  das  Symbol  wirklich von der
       Debian-spezifischen Änderung hinzugefügt wurde, dann sollte der Version ‚~’ angehängt werden.

       Bevor irgendein Patch auf die Symboldatei angewendet wird, sollte der Betreuer zweimal prüfen,  dass  der
       Patch vernünftig ist. Öffentliche Symbole sollten nicht verschwinden, daher sollte der Patch idealerweise
       nur neue Zeilen hinzufügen.

       Beachten  Sie,  dass  Sie in Symboldateien Kommentare einfügen können: jede Zeile, die mit ‚#’ als ersten
       Zeichen beginnt, ist ein Kommentar, falls sie nicht mit  ‚#include’  beginnt  (siehe  Abschnitt  Includes
       verwenden).  Zeilen,  die  mit ‚#MISSING:’ anfangen, sind besondere Kommentare, die verschwundene Symbole
       dokumentieren.

       Vergessen Sie  nicht,  zu  überprüfen,  ob  alte  Versionen  aktualisiert  werden  müssen.  Es  gibt  für
       dpkg-gensymbols  keine  Möglichkeit,  hierzu eine Warnung auszugeben. Wird der Diff blind akzeptiert oder
       wird angenommen, dass nichts geändert werden muss, wenn es keinen  Diff  gibt,  ohne  auf  Änderungen  zu
       prüfen,  kann  dies  dazu  führen,  dass  lockere  Abhängigkeiten  erzeugt werden, laut deren mit älteren
       Versionen gearbeitet werden kann, obwohl dies nicht möglich ist. Dies wird zu schwer zu findenden Fehlern
       bei (teilweisen) Upgrades führen.

   Verwendung der #PACKAGE#-Ersetzung
       In einigen seltenen Fällen unterscheidet sich der Name der Bibliothek auf verschiedenen Architekturen. Um
       zu vermeiden, dass der Paketname in  der  Symboldatei  fest  kodiert  wird,  können  Sie  die  Markierung
       #PACKAGE#  verwenden.  Während  der  Installation  der  Symboldatei  wird sie durch den echten Paketnamen
       ersetzt. Anders als die Markierung #MINVER#  wird  #PACKAGE#  nie  in  der  Symboldatei  innerhalb  eines
       Binärpakets auftauchen.

   Verwendung von Symbolkennzeichnungen
       Symbolkennzeichnungen  sind  nützlich,  um Symbole zu markieren, die in irgendeiner Weise besonders sind.
       Jedes  Symbol  kann  eine  beliebige  Anzahl  zugeordneter   Kennzeichnungen   besitzen.   Während   alle
       Kennzeichnungen  ausgewertet und gespeichert werden, werden nur einige von dpkg-gensymbols verstanden und
       lösen eine Spezialbehandlung der Symbole aus. Lesen Sie den  Unterabschnit  Standardsymbolkennzeichnungen
       für eine Referenz dieser Kennzeichnungen.

       Kennzeichnungsspezifikationen  kommen  direkt  vor dem Symbolnamen (dazwischen sind keine Leerraumzeichen
       erlaubt). Sie beginnen immer mit einer öffnenden Klammer (, enden mit einer schließenden  Klammer  )  und
       müssen  mindestens  eine  Kennzeichnung  enthalten.  Mehrere  Kennzeichnungen  werden durch das Zeichen |
       getrennt. Jede Kennzeichnungen kann optional einen Wert enthalten, der von der  Kennzeichnung  durch  das
       Zeichen  =  getrennt  wird.  Kennzeichennamen  und -werte können beliebige Zeichenketten sein, sie dürfen
       allerdings  keine  der   der   besonderen   Zeichen   )   |   =   enthalten.   Symbolnamen,   die   einer
       Kennzeichnungsspezifikation  folgen,  können  optional  mit  den  Zeichen  '  oder  "  zitiert werden, um
       Leerraumzeichen darin zu erlauben. Falls keine Kennzeichnungen für das Symbol spezifiziert  sind,  werden
       Zitatzeichen als Teil des Symbolnamens behandelt, der bis zum ersten Leerzeichen geht.

        (Kennz1=bin markiert|Name mit Leerraum)"zitiertes gekennz Symbol"@Base 1.0
        (optional)gekennzeichnet_unzitiertes_Symbol@Base 1.0 1
        ungekennzeichnetes_Symbol@Base 1.0

       Das  erste Symbol im Beispiel heißt zitiertes gekennz Symbol und hat zwei Kennzeichnungen: Kennz1 mit dem
       Wert   bin   markiert   und   Name   mit    Leerraum    ohne    Wert.    Das    zweite    Symbol    heißt
       gekennzeichnet_unzitiertes_Symbol  und  ist  nur  mit dem Kennzeichen namens optional gekennzeichnet. Das
       letzte Symbol ist ein Beispiel eines normalen, nicht gekennzeichneten Symbols.

       Da Symbolkennzeichnungen eine Erweiterung des Formats deb-symbols(5) sind, können sie  nur  Teil  der  in
       Quellpaketen  verwandten  Symboldateien  sein  (diese  Dateien  sollten  dann  als  Vorlagen  zum Bau der
       Symboldateien, die in Binärpakete eingebettet werden, gesehen  werden).  Wenn  dpkg-gensymbols  ohne  die
       Option  -t aufgerufen wird, wird es alle Symbole ausgeben, die zum Format deb-symbols(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 (-t) in der Ausgabe beibehalten
       und in ihrer Originalform wie sie geladen wurden auch geschrieben.

   Standard-Symbolkennzeichnungen
       optional
              Ein als »optional« gekennzeichnetes Symbol kann jederzeit von der Bibliothek verschwinden und wird
              nie  zum  Fehlschlag  von  dpkg-gensymbols  führen.   Verschwundene   optionale   Symbole   werden
              kontinuierlich  als  MISSING  (Fehlend) in dem Diff in jeder neuen Paketversion auftauchen. Dieses
              Verhalten dient als Erinnerung für den Betreuer, dass so ein Symbol aus der  Symboldatei  entfernt
              oder  wieder  der  Bibliothek  hinzugefügt werden muss. Wenn das optionale Symbol, dass bisher als
              MISSING bezeichnet gewesen war, plötzlich in der nächsten Version wieder auftaucht, wird es wieder
              auf den Status „existing“ (existierend) gebracht, wobei die minimale Version unverändert bleibt.

              Diese Markierung ist für private Symbole nützlich, deren Verschwinden  keinen  ABI-Bruch  auslöst.
              Beispielsweise  fallen  die  meisten  C++-Template-Instanziierungen  in  diese Kategorie. Wie jede
              andere Markierung kann auch diese einen beliebigen Wert haben: sie könnte  angeben,  warum  dieses
              Symbol als optional betrachtet wird.

       arch=Architekturliste
       arch-bits=Architektur-Bits
       arch-endian=Architektur-Endianness
              Diese  Markierungen  erlauben  es,  den  Satz  an Architekturen einzugrenzen, auf denen das Symbol
              existieren sollte. Die Markierungen arch-bits und arch-endian werden seit Dpkg 1.18.0 unterstü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ür fehlende
              Symbole angewandt und dpkg-gensymbols kö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ü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
              Änderung auftauchen), aber es wird nicht als neu betrachtet.

              Beim Betrieb im standardmäß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.

              Das Format der Architekturliste ist das gleiche wie das des Feldes Build-Depends in debian/control
              (außer den einschließ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ährend das dritte überall außer auf Armel betrachtet wird.

               (arch=alpha any-amd64 ia64)64bit_specific_symbol@Base 1.0
               (arch=linux-any)linux_specific_symbol@Base 1.0
               (arch=!armel)symbol_armel_does_not_have@Base 1.0

              architecture-bits ist entweder 32 oder 64.

               (arch-bits=32)32bit_specific_symbol@Base 1.0
               (arch-bits=64)64bit_specific_symbol@Base 1.0

              architecture-endianness ist entweder little oder big.

               (arch-endian=little)little_endian_specific_symbol@Base 1.0
               (arch-endian=big)big_endian_specific_symbol@Base 1.0

              Mehrere Einschränkungen können aneinandergehängt werden.

               (arch-bits=32|arch-endian=little)32bit_le_symbol@Base 1.0

       ignore-blacklist
              dpkg-gensymbols verfügt über eine interne Ausschußliste (»blacklist«) 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
              ignore-blacklist kennzeichnen. Dies kann für einige grundlegende  Bibliotheken  der  Werkzeugkette
              wie libgcc notwendig sein.

       c++    Gibt c++-Symbolmuster an. Lesen Sie den Unterabschnitt Verwendung von Symbolmuster unten.

       symver Gibt   symver  (Symbolversion)-Symbolmuster  an.  Lesen  Sie  den  Unterabschnitt  Verwendung  von
              Symbolmuster unten.

       regex  Gibt regex-Symbolmuster an. Lesen Sie den Unterabschnitt Verwendung von Symbolmuster unten.

   Verwendung von Symbolmustern
       Anders als die Standardsymbolspezifikation kann ein Muster  mehrere  reale  Symbole  aus  der  Bibliothek
       abdecken.  dpkg-gensymbols wird versuchen, jedes Muster auf jedes reale Symbol, für das kein spezifisches
       Symbolgegenstü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.

       Ein Muster wird als verloren betrachtet, falls es auf kein Symbol in der Bibliothek passt.  Standardmäßig
       wird  dies  ein  Versagen  von dpkg-gensymbols in der Stufe -c1 oder höher auslösen. Falls der Fehlschlag
       allerdings unerwünscht ist, kann das Muster mit der Kennzeichnung optional  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 arch beschränkt werden. Bitte
       lesen Sie den Unterabschnitt Standard Symbolkennzeichnungen oben für weitere Informationen.

       Muster sind eine Erweiterung des Formats deb-symbols(5);  sie  sind  daher  nur  in  Symboldatei-Vorlagen
       gültig.  Die  Musterspezifikationssyntax  unterscheidet  sich  nicht  von der eines spezifischen Symbols.
       Allerdings dient der Symbolnamenteil der Spezifikation als Ausdruck, der gegen Name@Version eines  realen
       Symbols  gepasst wird. Um zwischen den verschiedenen Mustertypen zu unterscheiden, wird es typischerweise
       mit einer speziellen Kennzeichnung gekennzeichnet.

       Derzeit unterstützt dpkg-gensymbols drei grundlegene Mustertypen:

       c++
          Dieses Muster wird durch  die  Kennzeichnung  c++  verzeichnet.  Es  passt  nur  auf  die  entworrenen
          (»demangled«)  Symbolnamen (wie sie vom Hilfswerkzeug c++filt(1) ausgegeben werden). Dieses Muster ist
          sehr hilfreich um auf  Symbole  zu  passen,  bei  dem  die  verworrenen  (»mangled«)  Namen  sich  auf
          verschiedenen  Architekturen  unterscheiden  während die entworrenen die gleichen bleiben. Eine Gruppe
          solcher Symbole ist non-virtual thunks, die einen architekturspezifischen Versatz in ihren verworrenen
          Namen eingebettet haben. Eine häufige Instanz dieses Falles ist ein virtueller Destruktur,  der  unter
          rautenförmiger  Vererbung  ein  nicht-virtuelles  Thunk-Symbol  benötigt.  Selbst  wenn beispielsweise
          _ZThn8_N3NSB6ClassDD1Ev@Base   auf   32   Bit-Architekturen   _ZThn16_N3NSB6ClassDD1Ev@Base   auf   64
          Bit-Architekturen ist, kann es mit einem einzigen c++-Muster gepasst werden:

          libdummy.so.1 libdummy1 #MINVER#
           […]
           (c++)"non-virtual thunk to NSB::ClassD::~ClassD()@Base" 1.0
           […]

          Der entworrene Name oben kann durch Ausführung folgenden Befehls erhalten werden:

           $ echo '_ZThn8_N3NSB6ClassDD1Ev@Base' | c++filt

          Bitte  beachten Sie, dass per Definition zwar der verworrene Name in der Bibliothek eindeutig ist, die
          aber nicht notwendigerweise für die entworrenen Namen zutrifft. Ein Satz von unterschiedlichen  realen
          Symbolen   kö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ür sie generiert). Da diese
          Kollisionen aber auf dem  ABI-Niveau  passieren,  sollten  sie  nicht  die  Qualität  der  Symboldatei
          reduzieren.

       symver
          Dieses Muster wird durch die Kennzeichnung symver verzeichnet. Gut betreute Bibliotheken verfügen über
          versionierte  Symbole,  wobei  jede  Version  zu  der Version der Originalautoren passt, in der dieses
          Symbol hinzugefügt wurde. Falls das der Fall ist, können SIe ein symver-Muster verwenden, um auf jedes
          zu einer spezifizierten Version zugeordnete Symbol zu passen. Beispiel:

          libc.so.6 libc6 #MINVER#
           (symver)GLIBC_2.0 2.0
           […]
           (symver)GLIBC_2.7 2.7
           access@GLIBC_2.0 2.2

          Alle Version GLIBC_2.0 und GLIBC_2.7 zugeordneten Symbole werden zu einer minimalen Version  2.0  bzw.
          2.7  führen,  wobei  das  Symbol  access@GLIBC_2.0  die Ausnahme darstellt. Es wird zu einer minimalen
          Abhängigkeit  auf  libc6  Version   2.2   führen,   obwohl   es   im   Geltungsbereich   des   Musters
          »(symver)GLIBC_2.0« passt, da spezielle Symbole vor Mustern Vorrang haben.

          Bitte   beachten  Sie,  dass  Platzhaltermuster  im  alten  Format  (angezeigt  durch  »*@version«  im
          Symbolnamenfeld)  zwar  noch  unterstützt  werden,  sie  aber  durch  die  Syntax  im   neuen   Format
          »(symver|optional)version«    abgelöst   wurden.   Beispielsweise   sollte   »*@GLIBC_2.0   2.0«   als
          »(symver|optional)GLIBC_2.0 2.0« geschrieben werden, falls das gleiche Verhalten benötigt wird.

       regex
          Muster mit regulären Ausdrücken werden durch die Kennzeichnung regex verzeichnet. Sie passen  auf  den
          regulären  Ausdruck von Perl, der im Symbolnamenfeld angegeben ist. Ein regulärer Ausdruck wird wie er
          ist gepasst. Denken Sie daher daran, ihn mit dem Zeichen ^ zu beginnen, da er ansonsten auf jeden Teil
          der Zeichenkette des realen Symbols name@version passt. Beispiel:

          libdummy.so.1 libdummy1 #MINVER#
           (regex)"^mystack_.*@Base$" 1.0
           (regex|optional)"private" 1.0

          Symbole wie »mystack_new@Base«, »mystack_push@Base«, »mystack_pop@Base« usw. werden vom ersten  Muster
          gepasst,  während  dies  z.B. für »ng_mystack_new@Base« nicht der Fall ist. Das zweite Muster wird auf
          alle Symbole, die die Zeichenkette »private« in  ihren  Namen  enthalten,  passen  und  die  gepassten
          Symbole erben die Kennzeichnung optional vom Muster.

       Die oben aufgeführten grundlegenden Muster können - wo es Sinn ergibt - kombiniert werden. In diesem Fall
       werden sie in der Reihenfolge verarbeitet, in der die Kennzeichnungen angegeben sind. Im Beispiel

        (c++|regex)"^NSA::ClassA::Private::privmethod\d\(int\)@Base" 1.0
        (regex|c++)N3NSA6ClassA7Private11privmethod\dEi@Base 1.0

       werden           die           Symbole          »_ZN3NSA6ClassA7Private11privmethod1Ei@Base«          und
       »_ZN3NSA6ClassA7Private11privmethod2Ei@Base« gepasst. Beim Passen der ersten Musters wird das rohe Symbol
       erst als C++-Symbol entworren, dann wird der entworrende Name gegen den regulären Ausdruck  gepasst.  Auf
       der  anderen Seite wird beim Passen des zweiten Musters der reguläre Ausdruck gegen den rohen Symbolnamen
       gepasst, dann wird das Symbol überprüft, ob es ein C++-Symbol ist, indem das Entwirren versucht wird. Ein
       Fehlschlag eines  einfachen  Musters  wird  zum  Fehlschlag  des  gesamten  Musters  führen.  Daher  wird
       beispielsweise  »__N3NSA6ClassA7Private11privmethod\dEi@Base«  keines  der  Muster  passen,  da  es  kein
       gültiges C++-Symbol ist.

       Im  Allgemeinen  werden  die  Muster  in  zwei  Kategorien  eingeteilt:  Aliase  (grundlegende  c++-  und
       symver-Muster)  und  generische  Muster  (regex  und alle Kombinationen grundlegender Muster). Passen von
       grundlegenden alias-basierenden Mustern ist schnell (O(1)), während generische Muster O(N) (wobei  N  die
       Anzahl der generischen Muster ist) für jedes Symbol ist. Daher wird empfohlen, generische Muster nicht zu
       viel zu verwenden.

       Wenn  mehrere Muster auf das gleiche Symbol passen, werden Aliase (zuerst c++, dann symver) gegenü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äge nicht empfohlen wird,  da  dpkg-gensymbols  Diffs  basierend  auf  der
       alphanumerischen Reihenfolge ihrer Namen erstellt.

   Includes verwenden
       Wenn  der  Satz  der exportierten Symbolen sich zwischen Architekturen unterscheidet, kann es ineffizient
       werden, eine einzige Symboldatei zu verwenden. In diesen Fällen kann sich eine Include-Direktive in einer
       Reihe von Arten als nützlich erweisen:

       •   Sie können den gemeinsamen Teil in eine  externe  Datei  auslagern  und  diese  Datei  dann  in  Ihre
           Paket.symbols.Arch-Datei mit einer include-Direktive wie folgt einbinden:

           #include "Pakete.symbols.common"

       •   Die Include-Direktive kann auch wie jedes Symbol gekennzeichnet werden:

           (Kennzeichen|…|KennzeichenN)#include "einzubindende-Datei"

           Als  Ergebnis  werden  alle  Symbole  aus  einzubindende-Datei  standardmäßig  als  mit KennzeichenKennzeichenN gekennzeichnet betrachtet. Sie können diese Funktionalität benutzen, um eine  gemeinsame
           Datei Paket.symbols zu erstellen, die architekturspezifische Symboldateien einbindet:

             common_symbol1@Base 1.0
            (arch=amd64 ia64 alpha)#include "Paket.symbols.64bit"
            (arch=!amd64 !ia64 !alpha)#include "Paket.symbols.32bit"
             common_symbol2@Base 1.0

       Die  Symboldateien  werden  Zeile  für Zeile gelesen und include-Direktiven werden bearbeitet, sobald sie
       erkannt werden. Das bedeutet, dass der Inhalt der Include-Datei jeden Inhalt überschreiben kann, der  vor
       der  Include-Direktive  aufgetaucht  ist  und  Inhalt  nach  der  Direktive  alles  aus der Include-Datei
       überschreiben kann. Jedes Symbol (oder sogar  weitere  #include-Direktiven)  in  der  Include-Datei  kann
       zusätzliche   Kennzeichnungen   spezifizieren   oder   Werte  der  vererbtgen  Kennzeichnungen  in  ihrer
       Kennzeichnungsspezifikation überschreiben. Allerdings gibt es  keine  Möglichkeit  für  ein  Symbol,  die
       ererbten Kennzeichnungen zu überschreiben.

       Eine  eingebundene Datei kann die Kopfzeile wiederholen, die den SONAME der Bibliothek enthält. In diesem
       Fall ü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:

       #include "libirgendwas1.symbols.common"
        arch_spezifisches_Symbol@Base 1.0

   Gute Bibliotheksverwaltung
       Eine gut verwaltete Bibliothek hat die folgenden Eigenschaften:

       •   seine  API  ist  stabil  (öffentliche  Symbole  entfallen  nie,  nur  neue öffentliche Symbole werden
           hinzugefügt) und inkompatible Änderungen erfolgen nur, wenn sich der SONAME ändert,

       •   idealerweise verwendet sie Symbolversionierung,  um  ABI-Stabilität  trotz  interner  Änderungen  und
           API-Erweiterungen zu erreichen,

       •   sie exportiert nie private Symbole (als Hilfslösung können diese als optional gekennzeichnet werden).

       Bei  der  Verwaltung  der  Symboldatei  kann  das Auftauchen und Verschwinden von Symbolen leicht bemerkt
       werden. Es ist aber schwieriger, inkompatbile API- und  ABI-Änderungen  zu  bemerken.  Daher  sollte  der
       Betreuer  intensiv  die  Changelog-Einträge  durchschauen und nach Fällen suchen, in denen die Regeln der
       guten Bibliotheksverwaltung gebrochen wurden.  Falls  mögliche  Probleme  entdeckt  wurden,  sollten  der
       Originalautor   informiert   werden,   da   eine  Korrektur  vom  Originalautor  immer  besser  als  eine
       Debian-spezifische Hilfslösung ist.

OPTIONEN

       -PPaketbauverzeichnis
              Suche nach Paketbauverzeichnis statt nach debian/tmp.

       -pPaket
              Definiert den Paketnamen. Benötigt, falls mehr als ein binäres Paket in debian/control  aufgeführt
              ist (oder falls es keine Datei debian/control gibt).

       -vVersion
              Definiert  die  Paketversion.  Standardmäßig  wird  die  Version  aus  debian/changelog entnommen.
              Benötigt, falls der Aufruf außerhalb des Quellpaketbaums erfolgt.

       -eBibliotheksdatei
              Nur die explizit aufgeführten Bibliotheken untersuchen statt  alle  öffentlichen  Bibliotheken  zu
              finden.  Sie  können  Shell-Muster,  die  zur  Expansion  von Pfadnamen verwandt werden (siehe die
              Handbuchseite File::Glob(3perl) für weitere Details) in  Bibliotheksdatei  verwenden,  um  mehrere
              Bibliotheken mit einem einzelnen Argument zu passen (andernfalls benötigen Sie mehrere -e).

       -lVerzeichnis
              Stellt  Verzeichnis der Liste der zu durchsuchenden privaten Laufzeitbibliotheken voran (seit Dpkg
              1.19.1). Diese Option kann mehrfach angegeben werden.

              Hinweis:  Verwenden  Sie  diese   Variable,   statt   LD_LIBRARY_PATH   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-Übersetzen
              problematisch werden.

       -IDateiname
              Verwende  Dateiname  als  Referenzdatei, um die Symboldatei zu erstellen, die dann im Paket selbst
              integriert wird.

       -O[Dateiname]
              Die erstellte Symbols-Datei auf die Standardausgabe oder nach Dateiname, falls angegeben, ausgeben
              statt in debian/tmp/DEBIAN/symbols (oder  Paket-Bauverzeichnis/DEBIAN/symbols  falls  -P  verwandt
              wurde).  Falls  Dateiname  bereits  existiert,  wird  deren Inhalt als Grundlage für die erstellte
              Symboldatei  verwandt.  Sie  können  diese  Funktionalität  benutzen,  um  eine   Symboldatei   zu
              aktualisieren, so dass sie zu einer neueren Version der Originalautoren Ihrer Bibliothek passt.

       -t     Schreibe  die  Symboldatei  im  Vorlagenmodus  statt  im zu deb-symbols(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ätsmodus. Desweiteren könnten einige Symbole beim Schreiben einer
              Standard deb-symbols(5)-Datei entfernt werden (gemäß  der  Verarbeitungsregeln  für  Kennzeichen),
              während in der Symboldateivorlage immer alle Symbole geschrieben werden.

       -c[0-4]
              Definiert  die  Prüfungen, die beim Vergleich der erstellten Symboldatei mit der Vorlagendatei als
              Startpunkt erfolgen sollen. Standardstufe ist 1. Zunehmende Stufen führen mehr Prüfungen durch und
              enthalten alle Prüfungen der niedrigeren Stufen. Stufe 0 schlägt nie fehl. Stufe 1  schlägt  fehl,
              wenn einige Symbole verschwunden sind. Stufe 2 schlägt fehlt, falls einige neue Symbole eingeführt
              wurden.  Stufe  3 schlägt fehl, falls einige Bibliotheken verschwunden sind. Stufe 4 schlägt fehl,
              falls einige Bibliotheken hinzugekommen sind.

              Dieser Wert kann  von  der  Umgebungsvariablen  DPKG_GENSYMBOLS_CHECK_LEVEL  außer  Kraft  gesetzt
              werden.

       -q     Ruhig  verhalten  und  nie  einen  Diff zwischen der erstellten Symboldatei und der als Startpunkt
              verwandten Vorlagendatei erstellen oder keine Warnungen bezüglich  neuer/verlorender  Bibliotheken
              oder neuer/verlorender Symbole ausgeben. Diese Option deaktiviert nur die informative Ausgabe aber
              nicht die Prüfungen selbst (sehen Sie hierzu die Option -c).

       -aArchitektur
              Nehme Arch als Host-Architektur beim Verarbeiten der Symboldateien an. Verwenden Sie diese Option,
              um  Symboldateien  oder  Diffs  für  beliebige  Architekturen  zu  erstellen,  vorausgesetzt,  die
              Binärprogramme sind bereits verfügbar.

       -d     Debug-Modus aktivieren. Eine  Vielzahl  von  Nachrichten  wird  angezeigt,  um  zu  erklären,  was
              dpkg-gensymbols durchführt.

       -V     Ausführlichen   Modus   aktivieren.  Die  erstellte  Symboldatei  enthält  veraltete  Symbole  als
              Kommentare. Im Vorlagenmodus werden Mustersymbole desweiteren von  Kommentaren  gefolgt,  die  die
              echten Symbole aufführen, die auf dieses Muster passen.

       -?, --help
              Zeige den Bedienungshinweis und beende.

       --version
              Gebe die Version aus und beende sich.

UMGEBUNG

       DPKG_GENSYMBOLS_CHECK_LEVEL
              Setzt die Befehlsüberprüfungsstufe außer Kraft, selbst wenn das Befehlszeilenargument -c übergeben
              wurde    (beachten    Sie,    dass    dies   der   üblichen   Konvention   widerspricht,   demnach
              Befehlszeilenargumente Vorrang über Umgebungsvariablen haben).

       DPKG_COLORS
              Setzt den Farbmodus (seit Dpkg 1.18.5). Die derzeit  unterstützten  Werte  sind:  auto  (Vorgabe),
              always und never.

       DPKG_NLS
              Falls  dies  gesetzt  ist,  wird  es  zur  Entscheidung,  ob  Native  Language  Support,  auch als
              Internationalisierung (oder i18n) Unterstützung bekannt, aktiviert wird (seit  Dpkg  1.19.0).  Die
              akzeptierten Werte sind: 0 und 1 (Vorgabe).

SIEHE AUCH

       https://people.redhat.com/drepper/symbol-versioning
       https://people.redhat.com/drepper/goodpractice.pdf
       https://people.redhat.com/drepper/dsohowto.pdf
       deb-symbols(5), dpkg-shlibdeps(1).

ÜBERSETZUNG

       Die  deutsche  Übersetzung  wurde  2004,  2006-2019 von Helge Kreutzmann <debian@helgefjell.de>, 2007 von
       Florian  Rehnisch  <eixman@gmx.de>  und  2008  von  Sven  Joachim  <svenjoac@gmx.de>  angefertigt.  Diese
       Übersetzung  ist  Freie  Dokumentation; lesen Sie die GNU General Public License Version 2 oder neuer für
       die Kopierbedingungen. Es gibt KEINE HAFTUNG.

1.19.7                                             2022-05-25                                 dpkg-gensymbols(1)