| dpkg-shlibdeps(1) | dpkg suite | dpkg-shlibdeps(1) |
dpkg-shlibdeps - skapar substvar-beroenden för delade bibliotek
dpkg-shlibdeps [flagga...] [-e] programfil [flagga...]
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 ska 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 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):
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 eller Build-Depends-Packages, 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 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:
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).
dpkg-shlibdeps tolkar argument som inte är flaggor som namn på körbara filer, precis som om de angivits som -eprogramfil.
Observera: Använd den här flaggan istället för att sätta LD_LIBRARY_PATH, eftersom miljövariabeln används för att styra körtidslänkaren, och genom att utnyttja det för att ange sökvägen till delade bibliotek vid kompilering kan det uppstå problem, till exempel vid korskompilering.
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.
När detta anges kommer paketnamnet används för att ändra förvalen baserade på binärpaketets metadata i debian/control.
Om paketet är Essential: yes är det förvalda beroendefältet Pre-Depends, annars Depends. Den förvalda pakettypen anges från fältet Package-Type. Paketet läggs till uppsättningen över paket som utesluts av -x.
Flaggan stöds sedan dpkg 1.22.7.
Varningarna kan väljas för en kommaavdelad lista med symboliska namn (sedan dpkg 1.22.12) eller från ett värde som anger ett bitfält för dessa varningar.
Aktiverad som förval.
Aktiverad som förval.
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:
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 SONAME och är versionshanterad (libvadsomhelst.so.X). Ett privat bibliotek (till exempel ett insticksprogram) bör inte ha något SONAME och behöver inte vara versionshanterat.
Om biblioteket som inte hittades ligger i en privat katalog i samma paket bör du lägga till katalogen med -l. 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 -l innehåller korrekt katalog som det också ligger i en privat katalog.
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/openoffice.org/../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.
deb-substvars(5), deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).
Peter Krefting och Daniel Nylander.
| 2025-06-30 | 1.22.21 |