Provided by:
dpkg-dev_1.15.4ubuntu2_all 
NAMN
dpkg-shlibdeps - skapar substvar-beroenden för delade bibliotek
SYNOPS
dpkg-shlibdeps [flaggor] programfil|-eprogramfil [flaggor]
BESKRIVNING
dpkg-shlibdeps beräknar beroenden mellan exekverbara filer som anges
som argument och delade bibliotek. Beroendena läggs till i
substitueringsvariabelfilen debian/substvars som variabler med namnen
shlibs:beroendefält där beroendeefält är ett beroendefältsnamn. Alla
andra variabler som börjar på shlibs: tas bort ur filen.
dpkg-shlibdeps kan generera beroendeinformation från två
informationskällor, antingen filen symbols eller filen shlibs. För
varje binärfil som analyseras av dpkg-shlibdeps tas en lista fram över
vilka bibliotek de är länkade mot. Programmet slår sedan upp varje
bibliotek i filen symbols, eller i filen shlibs (om den förstnämnda
inte existerar eller om debian/shlibs.local innehåller ett relevant
beroende). ). De båda filerna skall tillhandahållas av
bibliotekspaketet och borde därför vara tillgängliga som
/var/lib/dpkg/info/paket.symbols eller /var/lib/dpkg/info/paket.shlibs.
Paketnamnet identifieras i två steg: biblioteksfilen lokaliseras på
systemet (genom att slå upp i de kataloger ld.so skulle använt), och
därefter används dpkg -S biblioteksfil för att slå upp vilket paket
biblioteket kommer från.
Symbolfiler
Symbolfiler innehåller mer finkornig beroendeinformation genom att ange
det minsta beroendet för varje symbol som exporteras av biblioteket.
Skriptet försöker hitta de symboler som är associerade med ett
bibliotek på följande platser (den första träffen används):
debian/*/DEBIAN/symbols
Information om delade bibliotek som skapats av den aktuella
byggproceduren som också anropade dpkg-shlibdeps. De genereras
av dpkg-gensymbols(1). De används endast om biblioteket finns i
paketets byggräd. Filen symbols i det byggträdet går före
symbols-filer från andra binärpaket.
/etc/dpkg/symbols/package.symbols.arkitektur
/etc/dpkg/symbols/paket.symbols
Överstyrningsfil för beroendeinformation för delade bibliotek,
per system. arkitektur är det aktuella systemets arkitektur
(hämtas från dpkg-architecture -qDEB_HOST_ARCH).
adminkat/info/paket.symbols
Paketlokal överstyrande beroendeinformation för delade
bibliotek. Normalt är adminkat /var/lib/dpkg.
dpkg-shlibs kommer ihåg den (största) minimala version som behövs av
varje bibliotek när den söker genom de symboler som används av alla
binärfilerna. När proceduren är avslutad kan den visa det minsta
beroende som behövs av alla bibliotek som används (så tillvida
informationen i symbols-filerna är korrekt).
Som en säkerhetsåtgärd kan en symbols-fil innehålla
metainformationsfältet Build-Depends-Package, varpå dpkg-shlibdeps
hämtar vilken minsta version som behövs för paketet ur
Build-Depends-fältet och använder denna version om den är högre än den
minsta version som beräknats genom att söka genom symbolerna.
Shlibs-filer
Shlibs-filer associerar ett bibliotek direkt till ett beroende (utan
att se på symbolerna). Det är därför oftare starkare än vad som
egentligen behövs, men mycket säkert och enkelt att hantera.
Beroenden för ett bibliotek slås upp på flera platser. Den första filen
som innehåller information om det intressanta biblioteket används:
debian/shlibs.local
Paketlokal överstyrande beroendeinformation för delade
bibliotek.
/etc/dpkg/shlibs.override
Systemspecifik överstyrande beroendeinformation för delade
bibliotek.
debian/*/DEBIAN/shlibs
Information om delade bibliotek som skapats av den aktuella
byggproceduren som också anropade dpkg-shlibdeps. De genereras
av dpkg-gensymbols(1). De används bara om biblioteket finns i
paketets byggträd. Filen shlibs i byggträdet går före
shlibs-filer från andra paket.
adminkat/info/paket.shlibs
Paketlokal överstyrande beroendeinformation för delade
bibliotek. Normalt är adminkat /var/lib/dpkg.
/etc/dpkg/shlibs.default
Systemspecifik standardberoendeinformation för delade bibliotek.
De utökade beroendena används sedan direkt (förutom om de filtrerats
bort för att de identifierats som dubbletter, eller svagare än ett
annat beroende).
FLAGGOR
dpkg-shlibdeps tolkar argument som inte är flaggor som namn på körbara
filer, precis som om de angivits som -eprogramfil.
-eprogramfil
Ta med beroenden som är passar för delade bibliotek som krävs
för programfil.
-dberoendefält
Lägg till beroenden som skall läggas till till control-filens
beroendefält beroendefält. (Beroenden för detta fält läggs in i
variabeln shlibs:beroendefält.)
Flaggan -dberoendefält gäller för samtliga binärer efter
flaggan, fram till nästa -dberoendefält. Standardvärdet för
beroendefält är Depends.
Om samma katalogpost (eller en uppsättning alternativ)
förekommer i mer än ett av de kända beroendefältnamnen
Pre-Depends, Depends, Recommends, Enhances eller Suggests så
kommer dpkg-shlibdeps att automatiskt ta bort beroendet från
samtliga fält förutom det som anger de viktigaste beroendena.
-pvariabelnamnsprefix
Inled substitueringsvariabler med variabelnamnsprefix: i stället
för shlibs:. På samma sätt kommer befintliga
substitueringsvariabler som inleds med variabelnamnsprefix: (i
stället för shlibs:) att tas bort från
substitueringsvariabelfilen.
-O Skriv substitueringsvariabelinställningar på standard ut, i
stället för att försöka lägga till dem i
substitueringsvariabelfilen (som standard debian/substvars).
-ttyp Föredra information om delade bibliotek som märkts för den givna
pakettypen. Om det inte finns någon märkt information används
omärkt. Standardpakettypen är "deb". Beroendeinformation för
delade bibliotek märks för en given typ genom att inleda det med
namnet på typen, ett kolon, samt blanktecken.
-Llokal-shlibs-fil
Läs överstyrande beroendeinformation om delade bibliotek från
lokal-shlibs-fil i stället för debian/shlibs.local.
-Tsubstvars-fil
Skriv substitueringsvariabler i substvars-fil; standard är
debian/substvars.
-V Aktiverar pratsamt läge. Flera meddelanden visas för att
förklara vad dpkg-shlibs håller på med.
-xpaket
Uteslut paketet från de genererade beroendena. Flaggan är
användbar för att undvika självberoenden för paket som
innehåller ELF-binärer (exekverbara eller
biblioteksinsticksprogram) som använder ett bibliotek som ligger
i samma paket. Flaggan kan användas flera gånger för att
utesluta flera paket.
-Spaketbyggkatalog
Se först i paketbyggkatalog vid försök att hitta ett bibliotek.
Användbart när källkodspaketet bygger flera varianter av samma
bibliotek och du vill se till att du får beroendet från ett
givet binärpaket. Flaggan kan inte användas flera gånger:
kataloger söks efter i samma ordning före kataloger från andra
binärpaket.
--ignore-missing-info
Misslyckas inte om det inte upptäcks någon beroendeinformation
för ett delat bibliotek. Alla bibliotek bör tillhandahålla
beroendeinformation (antingen med shlibs-filer eller med
symbols-filer), även om de ännu inte används av andra paket.
--warnings=värde
Värde är ett bitfält som anger de varningar som kan ges av
dpkg-shlibdeps. Bit 0 (värde=1) aktiverar varningen "symbolen
sym, som används av binär, hittades inte i något av
biblioteken", bit 1 (värde=2) aktiverar varningen "beroendet på
bibliotekt kunde undvikas" och bit 2 (värde=4) aktiverar
varningen "binär borde inte vara länkat mot bibliotek". Standard
för värde är 3: de första två varningarna är aktiva som
standard, men inte den sista. Sätt värde till 7 om du vill att
alla varningar skall vara aktiva.
--admindir=kat
Ändra platsen för dpkg-databasen. Förval är /var/lib/dpkg.
-h, --help
Visar hjälpskärm och avslutar.
--version
Visar version och avslutar.
VARNINGAR
Eftersom dpkg-shlibdeps analyserar mängden symboler som används av
varje binärfil i det genererade paketet, kan det i flera fall skriva ut
varningsmeddelanden. De visar på saker som kan förbättras i paketet. I
de flesta fall gäller förbättringarna direkt uppströmskällkoden. Här är
de varningar du kan stöta på, i fallande allvarlighetsgrad:
symbolen sym, som används av binär, hittades inte i något av
biblioteken.
Den omnämnda symbolen hittades inte i biblioteken som länkas mot
binären. Binär är antagligen ett bibliotek och måste länkas mot
ett annat bibliotek under byggproceduren (länkarflaggan
-lbibliotek).
binär innehåller en referens till symbolen sym som inte kan kopplas;
det är troligen ett insticksprogram
Den angivna symbolen hittades inte i biblioteken som länkats mot
binären. Binär är antagligen ett insticksprogram och symbolen
tillhandahålls av programmet som läser in det. I teorin har inte
insticksprogram något SONAMN, men den här binären har ett och
därmed kunde det inte tydligt identifieras som insticksprogram.
Det faktum att binären befinner sig i en icke-offentlig katalog
är dock en stark indikation på att det inte är ett vanligt delat
bibliotek. Om binären faktiskt är ett insticksprogram kan du
ignorera varningen. Det är dock alltid möjligt att det är ett
riktigt bibliotek och att program som länker det använder en
RPATH så att den dynamiska länkaren hittar det. Om så är fallet
är biblioteket trasigt och behöver fixas.
Beroendet på bibliotek kunde undvikas om inte binärer meningslöst
länkades mot det (de använder inga av dess symboler).
Ingen av binärerna som länkas mot bibliotek använder någon av
symbolerna som tillhandahålls av biblioteket. Genom att rätta
alla binärer kan du undvika beroendet som gäller detta bibliotek
(såvida inte samma beroende även genereras av ett annat
bibliotek som faktiskt används).
binär borde inte vara länkat mot bibliotek (inga av symbolerna
används).
Binär länkar mot ett bibliotek den inte behöver. Det är inte ett
problem, Men genom att inte länka biblioteket mot binären kan
man uppnå en mindre prestandaförbättring. Varningen kontrollerar
samma information som den föregående, men gör det för varje
binär istället för att utföra kontrollen globalt på alla
analyserade binärer.
FELMEDDELANDEN
dpkg-shlibdeps kommer att misslyckas om det inte hittar ett öppet
bibliotek som en av binärerna använder, eller om biblioteket saknar
associerad beroendeinformation (antingen en shlibs-fil eller en
symbols-fil). Ett öppet bibliotek har ett SONAMN och är
versionshanterad (libvadsomhelst.so.X). Ett privat bibliotek (till
exempel ett insticksprogram) bör inte ha något SONAMN och behöver inte
vara versionshanterat.
hittade inte biblioteket bibliotek-sonamn som behövs för binär (dess
RPATH är "rpath")
Binär använder ett bibliotek som heter bibliotek-sonamn, men
dpkg-shlibdeps kunde inte hitta biblioteket. dpkg-shlibdeps
skapar en lista över kataloger det ser i på följande sätt:
katalogerna som beskrivs i RPATH i binären, kataloger som
beskrivs i /etc/ld.so.conf, kataloger i miljövariabeln
LD_LIBRARY_PATH, och vanliga öppna kataloger (/lib, /usr/lib,
/lib32, /usr/lib32, /lib64, /usr/lib64). Därefter ser det i
motsvarande kataloger i byggträdet för paketet som innehåller
binären som analyseras, i paketbyggträdet som anges med
kommandoradsflaggan -S, i andra pakets byggträd som innehåller
en DEBIAN/shlibs-fil och slutligen i rotkatalogen. Om
biblioteket inte hittas i någon av dessa kataloger får du det
här felmeddelandet.
Om biblioteket som inte hittades ligger i en privat katalog i
samma paket bör du lägga till katalogen i LD_LIBRARY_PATH. Om
det finns i ett annat binärpaket som byggs bör du se till att
shlibs- eller symbols-filen för paketet redan har skapats och
att LD_LIBRARY_PATH innehåller korrekt katalog som det också
ligger i en privat katalog.
hittade ingen beroendeinformation för biblioteksfil (använd av binär).
Biblioteket som behövs av binär hittades i biblioteksfil av
dpkg-shlibdeps, men dpkg-shlibdeps kunde inte hitta någon
beroendeinformation för biblioteket. För att hitta beroendet har
det försökt koppla biblioteket mot ett Debianpaket med hjälp av
dpkg -S biblioteksfil. Därefter såg det i motsvarande shlibs-
och symbols-filer i /var/lib/dpkg/info/, samt i de olika
paketens byggträd (debian/*/DEBIAN/).
Det här felet kan orsakas av felaktiga eller saknade shlibs-
eller symbols-filer i bibliotekets paket. Det kan även inträffa
om biblioteket byggts i samma källkodspaket och om shlibs-filen
ännu inte har skapats (då måste du fixa debian/rules så att det
skapar shlibs-filen innan det anropar dpkg-shlibdeps). Felaktig
RPATH kan också leda till att biblioteket hittas under ett
icke-kanoniskt namn (till exempel:
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/libssl.so.9.8
istället för /usr/lib/libssl.so.0.9.8) som inte associeras till
något paket, dpkg-shlibdeps försöker gå runt detta genom att
falla tillbaka på ett kanoniskt namn (med realpath(3)), men det
fungerar kanske inte alltid. Det är alltid bäst att städa upp
RPATH i binären för att undvika problem.
Om du anropar dpkg-shlibdeps i pratsamt läge (-v) kommer det ge
mycket mer information om var det försökte hitta
beroendeinformationen. Det kan vara användbart om du inte
förstår varför du får felmeddelandet.
SE ÄVEN
deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).
FÖRFATTARE
Upphovsrättsskyddat © 1995-1996 Ian Jackson
Upphovsrättsskyddat © 2000 Wichert Akkerman
Upphovsrättsskyddat © 2006 Frank Lichtenheld
Upphovsrättsskyddat © 2007-2008 Raphaël Hertzog
Detta är fri programvara; se GNU General Public License version 2 eller
senare för kopieringsvillkor. Det finns INGEN GARANTI.
ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.