dpkg-shlibdeps(1)

NAMN
dpkg-shlibdeps - skapar substvar-beroenden för delade bibliotek

SYNOPS
dpkg-shlibdeps [flagga...] [-e]programfil [flagga...]

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

Utdata från ”dpkg-query --control-path package symbols”
    Package-provided shared library dependency information. Unless overridden by --admindir, those files are located in /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).

As a safe-guard measure, a symbols file can provide a Build-Depends-Package meta-information field and dpkg-shlibdeps will extract the minimal version required by the corresponding package in the Build-Depends field and use this version if it's higher than the minimal version computed by scanning symbols.

  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.

Utdata från ”dpkg-query --control-path package shlibs”
    Package-provided shared library dependency information. Unless overridden by --admindir, those files are located in /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
    Include dependencies appropriate for the shared libraries required by executable. This option can be used multiple times.

-ldirectory
    Add directory to the list of directories to search for private shared libraries (since dpkg 1.17.0). This option can be used multiple times. Note: Use this option instead of setting LD_LIBRARY_PATH, as that environment variable is used to control the run-time linker and abusing it to set the shared library paths at build-time can be problematic when cross-compiling for example.

-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[filename]
    Print substitution variable settings to standard output (or filename if specified), rather than being added to the substitution variables file (debian/substvars by default).

-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 "paketet kunde undvika ett onödigt beroende" 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.

-?, --help
    Visar hjälpskärm och avslutar.

--version
    Visar version och avslutar.

DIAGNOSTIK

  Warnings
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.

paketet kan undvika ett onödigt beroende om binär inte länkades mot bibliotek (det använder inget av bibliotekets 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).

paketet kunde undvika ett onödigt beroende om binärer inte länkades mot bibliotek (de använder inga av bibliotekets symboler)
    Exakt samma varning som ovan, men för flera binärer

binär borde inte vara länkat mot bibliotek (det använder inget av bibliotekets symboler)
    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.

  Errors
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")
    The binary uses a library called library-soname but dpkg-shlibdeps has been unable to find the library. dpkg-shlibdeps creates a list of directories to check as following: directories listed in the RPATH of the binary, directories listed in /etc/ld.so.conf, directories added by the -l option, directories listed in the LD_LIBRARY_PATH environment variable, and standard public directories (/lib, /usr/lib, /lib32, /usr/lib32, /lib64, /usr/lib64). Then it checks those directories in the package's build tree of the binary being analyzed, in the packages' build trees indicated with the -S command-line option, in other packages' build trees that contains a DEBIAN/shlibs or DEBIAN/symbols file and finally in the root directory. If the library is not found in any of those directories, then you get this error. If the library not found is in a private directory of the same package, then you want to add the directory with -l. If it's in another binary package being built, you want to make sure that the shlibs/symbols file of this package is already created and that -l contains the appropriate directory if it also is in a private directory.

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/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. Calling dpkg-shlibdeps in verbose mode (-v) will provide much more information about where it tried to find the dependency information. This might be useful if you don't understand why it's giving you this error.

SE ÄVEN
deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).

ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.