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

NAAM
dpkg-shlibdeps - genereert substitutievariabelen over afhankelijkheidsrelaties tot gedeelde bibliotheken
OVERZICHT
dpkg-shlibdeps [optie...] [-e]programma [optie...]
BESCHRIJVING
dpkg-shlibdeps berekent de afhankelijkheidsrelaties tot gedeelde bibliotheken voor de programma's die
genoemd worden in zijn argumenten. De afhankelijkheden worden in het bestand met substitutievariabelen
debian/substvars toegevoegd als variabelenaam shlibs:afhankelijkheidsveld, waarbij afhankelijkheidsveld
de naam van een afhankelijkheidsveld is. Eventuele andere variabelen die met shlibs: beginnen worden uit
het bestand verwijderd.
dpkg-shlibdeps heeft twee mogelijke informatiebronnen om afhankelijkheidsinformatie te genereren, ofwel
symbols-bestanden ofwel shlibs-bestanden. Voor elke binair pakket dat dpkg-shlibdeps analyseert, zoekt
het de lijst van bibliotheken op waarmee het gelinkt is. Vervolgens zoekt het voor iedere bibliotheek
ofwel het symbols-bestand of het shlibs-bestand (indien het eerste niet bestaat of indien
debian/shlibs.local de relevante afhankelijkheidsinformatie bevat) op. Beide bestanden worden
verondersteld geleverd te worden door het bibliotheekpakket en zouden dus te vinden moeten zijn als
/var/lib/dpkg/info/pakket.symbols of /var/lib/dpkg/info/pakket.shlibs. De naam van het pakket wordt in
twee stappen gevonden: het bibliotheekbestand opzoeken op het systeem (er wordt in dezelfde mappen
gezocht als die welke ld.so zou gebruiken) en dan dpkg -S bibliotheekbestand gebruiken om het pakket op
te zoeken dat de bibliotheek levert.
Symbolenbestanden
Symbolenbestanden bevatten fijnmazige afhankelijkheidsinformatie door voor ieder symbool dat de
bibliotheek exporteert, de minimumvereiste op te geven. Het script tracht een symbolenbestand dat bij een
bibliotheekpakket hoort op de volgende plaatsen te vinden (het eerste dat gevonden wordt, wordt
gebruikt):
debian/*/DEBIAN/symbols
Informatie over gedeelde bibliotheken die gegenereerd werd door het huidige bouwproces dat ook
dpkg-shlibdeps aanriep. Zij worden gegenereerd door dpkg-gensymbols(1). Ze worden enkel gebruikt
als de bibliotheek aangetroffen wordt in de bouwboom van een pakket. Het bestand symbols in die
bouwboom heeft voorrang op symbolenbestanden van andere binaire pakketten.
/etc/dpkg/symbols/pakket.symbols.arch
/etc/dpkg/symbols/pakket.symbols
Systeemspecifieke vervangingsinformatie over afhankelijkheidsrelaties tot gedeelde bibliotheken.
arch is de architectuur van het huidige systeem (verkregen door dpkg-architecture
-qDEB_HOST_ARCH).
Uitvoer van “dpkg-query --control-path pakket symbols”
Door een pakket verstrekte informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken.
Tenzij anders bepaald door --admindir, zijn deze bestanden te vinden in /var/lib/dpkg.
Tijdens het doorzoeken van de door al de programma's gebruikte symbolen, onthoudt dpkg-shlibdeps van elke
bibliotheek de (hoogste) minimale versie die nodig is. Op het eind van het proces is het in staat voor
elke gebruikte bibliotheek uit te schrijven wat de minimale vereiste is (in de veronderstelling dat de
informatie uit de symbols-bestanden accuraat is).
Bij wijze van beschermende maatregel kan een symbols-bestand een meta-informatieveld Build-Depends-Pakket
bevatten. Dan zal dpkg-shlibdeps de door het corresponderende pakket vereiste minimale versie halen uit
het veld Build-Depends en deze versie gebruiken als ze hoger is dan de minimale versie die berekend werd
via het doorzoeken van symbolen.
Shlibs-bestanden
Shlibs-bestanden koppelen rechtstreeks een bibliotheek aan een vereiste (zonder naar de symbolen te
kijken). Dit is dus dikwijls strikter dan echt nodig, maar erg veilig en gemakkelijk te hanteren.
De afhankelijkheidsrelaties tot een bibliotheek worden op verschillende plaatsen opgezocht. Het eerste
bestand dat informatie biedt over de bibliotheek in kwestie, wordt gebruikt:
debian/shlibs.local
Pakket-eigen vervangende informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken.
/etc/dpkg/shlibs.override
Systeemspecifieke vervangende informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken.
debian/*/DEBIAN/shlibs
Informatie over gedeelde bibliotheken die gegenereerd werd door het huidige bouwproces dat ook
dpkg-shlibdeps inriep. Ze wordt enkel gebruikt als de bibliotheek aangetroffen wordt in de
bouwboom van het pakket. Het shlibs-bestand in die bouwboom heeft voorrang op shlibs-bestanden van
andere binaire pakketten.
Uitvoer van “dpkg-query --control-path pakket shlibs”
Door een pakket verstrekte informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken.
Tenzij anders bepaald door --admindir, zijn deze bestanden te vinden in /var/lib/dpkg.
/etc/dpkg/shlibs.default
Systeemspecifieke standaardinformatie over afhankelijkheidsrelaties tot gedeelde bibliotheken.
De uitgelichte afhankelijkheden worden dan rechtstreeks gebruikt (behalve als ze uitgefilterd werden
omdat ze als duplicaten onderkend werden of als zwakker dan een andere afhankelijkheid).
OPTIES
Argumenten die geen opties zijn, worden door dpkg-shlibdeps geïnterpreteerd als namen van programma's,
net alsof ze opgegeven werden als -eprogramma.
-eprogramma
Voeg de gepaste afhankelijkheidsrelaties tot gedeelde bibliotheken toe die nodig zijn voor
programma. Deze optie kan meermaals gebruikt worden.
-lmap Voeg map vooraan toe aan de lijst van mappen waarin naar particuliere gedeelde bibliotheken
gezocht moet worden (sinds dpkg 1.17.0). Deze optie kan meermaals gebruikt worden.
Opmerking: gebruik deze optie in de plaats van het instellen van LD_LIBRARY_PATH, aangezien die
omgevingsvariabele gebruikt wordt om de runtime linker aan te sturen. Daarvan misbruik maken om de
paden van gedeelde bibliotheken in te stellen tijdens het bouwen van het programma, kan
problematisch zijn, bijvoorbeeld bij het cross-compileren.
-dafhankelijkheidsveld
Geef afhankelijkheidsinformatie op die toegevoegd moet worden aan het afhankelijkheidsveld
afhankelijkheidsveld van het bestand control. (De afhankelijkheidsinformatie voor dit veld wordt
in de variabele shlibs:dependency-field geplaatst.)
De optie -dafhankelijkheidsveld heeft uitwerking voor alle programma's na de optie tot aan het
volgende -dafhankelijkheidsveld. Het standaard afhankelijkheidsveld is Depends.
Indien hetzelfde afhankelijkheidsitem (of set van alternatieven) te vinden is in meer dan een van
de herkende namen voor afhankelijkheidsvelden Pre-Depends, Depends, Recommends, Enhances of
Suggests, zal dpkg-shlibdeps de afhankelijkheid automatisch uit alle velden verwijderen, behalve
uit het veld dat de belangrijkste afhankelijkheid vertegenwoordigt.
-pvariabelenaamprefix
Begin substitutievariabelen met variabelenaamprefix: in plaats van met shlibs:. Op dezelfde wijze
worden eventuele substitutievariabelen die beginnen met variabelenaamprefix: (in plaats van met
shlibs:), verwijderd uit het bestand met substitutievariabelen.
-O[bestandsnaam]
Geef de instellingen in verband met substitutievariabelen weer op de standaarduitvoer (of in
bestandsnaam als die opgegeven werd; sinds dpkg 1.17.2), eerder dan ze toe te voegen aan het
bestand met substitutievariabelen (standaard is dat debian/substvars).
-ttype Geef de voorrang aan informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken die
gemarkeerd werd als geldend voor het opgegeven pakkettype. Indien er geen gemarkeerde informatie
te vinden is, wordt teruggevallen op niet-gemarkeerde informatie. Het standaardpakkettype is deb.
Informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken wordt gemarkeerd als geldend
voor een bepaald type door ze te laten voorafgaan door de naam van dat type, een dubbele punt en
witruimte.
-Llokaal-shlibs-bestand
Lees vervangende informatie over afhankelijkheidsrelaties tot gedeelde bibliotheken uit
lokaal-shlibs-bestand in plaats van uit debian/shlibs.local.
-Tsubstvars-bestand
Schrijf substitutievariabelen neer in substvars-bestand. Standaard is dat debian/substvars.
-v Schakel de breedsprakige modus in (sinds dpkg 1.14.8). Talrijke berichten worden weergegeven om
uit te leggen wat dpkg-shlibdeps doet.
-xpakket
Sluit het pakket uit van de gegenereerde afhankelijkheden (sinds dpkg 1.14.8). Dit is nuttig om
een afhankelijkheid van zichzelf te vermijden voor pakketten die binaire bestanden van het type
ELF aanleveren (programma's of bibliotheekuitbreidingen), waarbij die binaire bestanden gebruik
maken van een bibliotheek die in hetzelfde pakket te vinden is. Deze optie kan meermaals gebruikt
worden om meerdere pakketten uit te sluiten.
-Spakket-bouwmap
Zoek eerst in pakket-bouwmap bij het zoeken naar een bibliotheek (sinds dpkg 1.14.15). Dit is
nuttig als het broncodepakket meerdere varianten van dezelfde bibliotheek bouwt en u zeker wilt
zijn dat u de afhankelijkheden krijgt van een specifiek binair pakket. U kunt deze optie meermaals
gebruiken: mappen zullen in de opgegeven volgorde doorzocht worden vooraleer gezocht wordt in de
mappen van andere binaire pakketten.
-Ipakketbouwmap
Sla pakketbouwmap over bij het zoeken naar shlibs-, symbolen- en gedeelde bibliotheek-bestanden
(sinds dpkg 1.18.5). U kunt deze optie meermaals gebruiken.
--ignore-missing-info
Beschouw het niet als een mislukking als voor een gedeelde bibliotheek geen
afhankelijkheidsinformatie gevonden kan worden (sinds dpkg 1.14.8). Het wordt afgeraden om deze
optie te gebruiken. Alle bibliotheken zouden afhankelijkheidsinformatie moeten verschaffen (ofwel
via shlibs-bestanden of via symbolenbestanden), zelfs als die nog niet door andere pakketten
gebruikt wordt.
--warnings=waarde
waarde is een bit-veld dat aangeeft welke set waarschuwingen dpkg-shlibdeps kan geven (sinds dpkg
1.14.17). Bit 0 (waarde=1) activeert de waarschuwing “symbool sym dat door binair-bestand gebruikt
wordt, werd in geen enkele bibliotheek aangetroffen”, bit 1 (waarde=2) activeert de waarschuwing
“pakket zou een nutteloze afhankelijkheid kunnen vermijden” en bit 2 (waarde=4) activeert de
waarschuwing “binair-bestand zou niet gelinkt moeten worden met bibliotheek”. De standaard-waarde
is 3: standaard zijn de eerste twee waarschuwingen geactiveerd, de laatste niet. Stel de waarde in
op 7 indien u wilt dat alle waarschuwingen geactiveerd worden.
--admindir=map
Geef een andere locatie op voor de database van dpkg (sinds dpkg 1.14.0). De standaardlocatie is
/var/lib/dpkg.
-?, --help
Toon info over het gebruik en sluit af.
--version
Toon de versie en sluit af.
OMGEVING
DPKG_COLORS
Stelt de kleurmodus in (sinds dpkg 1.18.5). Waarden die momenteel gebruikt mogen worden zijn: auto
(standaard), always en never.
DPKG_NLS
Indien dit ingesteld is, zal het gebruikt worden om te beslissen over het activeren van
moedertaalondersteuning, ook gekend als internationaliseringsondersteuning (of i18n) (sinds dpkg
1.19.0). Geldige waarden zijn: 0 and 1 (standaard).
DIAGNOSTIEK
Waarschuwingen
Aangezien dpkg-shlibdeps de set symbolen analyseert die gebruikt wordt door elk binair bestand uit het
gegeneerde pakket, is het in staat om in verschillende gevallen waarschuwingen te geven. Zij geven u
informatie over zaken die in het pakket verbeterd kunnen worden. In de meeste gevallen hebben die
verbeteringen rechtstreeks betrekking op de broncode van de toeleveraar (upstream). In aflopende volgorde
van belangrijkheid volgen hierna de waarschuwingen die u kunt krijgen:
symbool sym gebruikt door binair-bestand in geen enkele bibliotheek gevonden.
Het aangegeven symbool werd niet aangetroffen in de bibliotheken die met het binair bestand
gelinkt werden. Hoogstwaarschijnlijk is binair-bestand een bibliotheek die gelinkt moet worden met
een andere bibliotheek tijdens het bouwproces (optie -lbibliotheek van de linker).
Binair bestand bevat een onoplosbare verwijzing naar symbool sym: wellicht is het een uitbreiding
Het aangegeven symbool werd niet aangetroffen in de bibliotheken die gelinkt zijn met het binair
bestand. Hoogstwaarschijnlijk is het binair-bestand een uitbreiding (plug-in) en wordt het symbool
ter beschikking gesteld door het programma dat deze uitbreiding laadt. In theorie heeft een
uitbreiding geen SONAME, maar dit binair bestand heeft er wel een en in die hoedanigheid kon het
niet met zekerheid geïdentificeerd worden als een uitbreiding. Het feit evenwel dat het binaire
bestand opgeslagen wordt in een niet-publieke map is een sterke aanwijzing dat het niet om een
gewone gedeelde bibliotheek gaat. Indien het binaire bestand effectief een uitbreiding is, mag u
deze waarschuwing negeren. Maar er bestaat altijd een kans dat het om een echte bibliotheek gaat
en dat programma's die ermee linken gebruik manken van een RPATH waardoor de dynamische lader ze
kan vinden. In dat geval gaat het om een defecte bibliotheek en moet het defect gerepareerd
worden.
Het pakket zou een nutteloze afhankelijkheid kunnen vermijden indien binair-bestand niet gelinkt was met
bibliotheek (het gebruikt geen enkel symbool van de bibliotheek)
Geen enkel van de binaire-bestanden die gelinkt werden met bibliotheek gebruikt een symbool dat
door de bibliotheek aangeleverd wordt. Door al de binaire bestanden te repareren zou u de
afhankelijkheidsrelatie die verband houdt met deze bibliotheek, kunnen vermijden (tenzij dezelfde
afhankelijkheid ook gegenereerd wordt door een andere bibliotheek die echt gebruikt wordt).
Het pakket zou een nutteloze vereiste kunnen vermijden indien programma's niet gelinkt waren met
bibliotheek (ze gebruiken geen enkel symbool van de bibliotheek)
Identiek dezelfde waarschuwing als hierboven, maar dan voor meerdere programma's.
Binair-bestand zou niet gelinkt moeten worden met bibliotheek (het gebruikt geen enkel symbool van de
bibliotheek)
Het binair-bestand is gelinkt met een bibliotheek die het niet nodig heeft. Dit is geen probleem,
maar er kan een kleine prestatiewinst bekomen worden wat de laadtijd van het binair bestand
betreft, door deze bibliotheek niet met dit binair bestand te koppelen. Deze waarschuwing
controleert dezelfde informatie als de voorgaande, maar doet dit voor elk binair bestand in plaats
van de toets globaal uit te voeren voor alle geanalyseerde binaire bestanden.
Fouten
dpkg-shlibdeps zal mislukken als het een publieke bibliotheek die door een binair bestand gebruikt wordt,
niet kan vinden of indien er geen afhankelijkheidsinformatie (ofwel een shlibs-bestand of een
symbolenbestand) aan die bibliotheek gekoppeld is. Een publieke bibliotheek heeft een SONAME en heeft een
versienummer (lib-iets.so.X). Een private bibliotheek (zoals een uitbreiding - plug-in) zou geen SONAME
mogen hebben en heeft geen versienummer nodig.
Kon bibliotheek SONAME-van-bibliotheek die binair-bestand nodig heeft, niet vinden (het RPATH ervan is
'rpath')
Het binair-bestand gebruikt een bibliotheek met de naam soname-van-bibliotheek, maar
dpkg-shlibdeps heeft de bibliotheek niet kunnen vinden. dpkg-shlibdeps legt als volgt een lijst
van te controleren mappen aan: mappen die vermeld worden in het RPATH van het binair bestand,
mappen die toegevoegd werden via de optie -l, mappen die vermeld worden in de omgevingsvariabele
LD_LIBRARY_PATH, kruismultiarch-mappen (bijv. /lib/arm64-linux-gnu, /usr/lib/arm64-linux-gnu),
standaard publieke mappen (/lib, /usr/lib), mappen vermeld in /etc/ld.so.conf en verouderde
multibibliotheekmappen (/lib32, /usr/lib32, /lib64, /usr/lib64). Daarna controleert het die mappen
binnenin de bouwboom van het binaire pakket dat geanalyseerd wordt, binnenin de pakketbouwbomen
die met de commandoregeloptie -S opgegeven werden, binnenin de bouwbomen van andere pakketten die
een bestand DEBIAN/shlibs of DEBIAN/symbols hebben en tenslotte in de basismap. Als de bibliotheek
in geen enkele van die mappen aangetroffen wordt, krijgt u deze foutmelding.
Indien de niet-gevonden bibliotheek zich in een private map van hetzelfde pakket bevindt, dan moet
u die map toevoegen met de optie -l. Als ze zich bevindt in een ander binair pakket dat gebouwd
wordt, moet u erop letten dat het bestand shlibs/symbols van dat pakket reeds gemaakt is en dat -l
de gepaste map bevat als ze zich ook in een private map bevindt.
Geen afhankelijkheidsinformatie gevonden voor bibliotheekbestand (dat gebruikt wordt door
binair-bestand).
De bibliotheek die binair-bestand nodig heeft, werd door dpkg-shlibdeps in bibliotheekbestand
gevonden, maar dpkg-shlibdeps was niet in staat vereisteninformatie voor die bibliotheek te
vinden. Om vereistengegevens te vinden heeft het geprobeerd de bibliotheek op te zoeken in een
Debian pakket met behulp van dpkg -S bibliotheekbestand. Daarna heeft het de overeenkomstige
shlibs- en symbols-bestanden nagekeken in /var/lib/dpkg/info/ en in de verschillende bouwbomen van
het pakket (debian/*/DEBIAN/).
Deze mislukking kan veroorzaakt worden door een slecht of ontbrekend shlibs- of symbols-bestand in
het pakket van de bibliotheek. Ze kan zich ook voordoen als de bibliotheek gebouwd wordt binnen
hetzelfde broncodepakket en de shlibs-bestanden nog niet aangemaakt zijn (in dat geval moet u
debian/rules repareren zodat de shlibs gemaakt worden voordat dpkg-shlibdeps ingeroepen wordt).
Een slecht RPATH kan er ook toe leiden dat de bibliotheek te vinden is onder een ongebruikelijke
naam (bijvoorbeeld /usr/lib/openoffice.org/../lib/libssl.so.0.9.8 in plaats van
/usr/lib/libssl.so.0.9.8), die aan geen enkel pakket gekoppeld is. dpkg-shlibdeps tracht dit te
omzeilen door terug te vallen op een gebruikelijke naam (met behulp van realpath(3)), maar dit
lukt niet altijd. Het is altijd het beste om het RPATH van het binair bestand uit te zuiveren om
problemen te voorkomen.
Het inroepen van dpkg-shlibdeps in de breedsprakige modus (-v) zal veel meer informatie geven over
waar het programma de afhankelijkheidsinformatie tracht te vinden. Dit kan nuttig zijn indien u
niet begrijpt waarom u deze foutmelding krijgt.
ZIE OOK
deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).
1.19.7 2022-05-25 dpkg-shlibdeps(1)