Man page - deb-src-symbols(5)

Packages contains this manual

Available languages:

en fr pt nl sv de

Manual

deb-src-symbols

NAMN
SYNOPS
BESKRIVNING
Kommentarer
AnvÀnda #PACKAGE#-substituering
AnvÀnda symboltaggar
Standardsymboltaggar
AnvÀnda symbolmönster
AnvÀnda inkluderingar
ÖVERSÄTTNING

NAMN

deb-src-symbols - Debians utökade mallfil för delade bibliotek

SYNOPS

debian/ paket .symbols. ark , debian/symbols. ark , debian/ paket .symbols , debian/symbols

BESKRIVNING

Symbolfilmallar medföljer DebiankÀllkodspaket och dess format Àr en övermÀngd av symbols-filen som sÀnds med DebianbinÀrpaket, se deb-symbols (5).

Kommentarer

Kommentarer stöds i symbolmallfilerna. Alla rader med ”#” som första tecken Ă€r kommentarer, sĂ„vida inte det börjar med ”#include” (se stycket "AnvĂ€nda inkluderingar"). Rader som börjar med ”#MISSING:” Ă€r speciella kommentarer som dokumenterar symboler som har försvunnit.

AnvÀnda #PACKAGE#-substituering

I nÄgra sÀllsynta fall skiljer sig namnet pÄ biblioteket mellan arkitekturer. För att undvika att hÄrdkoda namnet pÄ paketet i symbolfilen kan du anvÀnda markören #PACKAGE# . Den ersÀtts av det faktiska paketnamnet nÀr symbolfilen installeras. Till skillnad frÄn #MINVER# -markören kommer #PACKAGE# aldrig att dyka upp i en symbolfil i ett binÀrpaket.

AnvÀnda symboltaggar

Symboltaggning Àr nyttigt för att markera symboler som Àr speciella pÄ nÄgot sÀtt. Alla symboler kan ha ett godtyckligt antal taggar associerade med sig. Medan alla taggar tolkas och lagras Àr det bara ett par av dem som förstÄs av dpkg-gensymbols och som utlöser specialhantering av symbolerna. Se undersymbolen "Standardsymboltaggar" för mer information om dessa taggar.

Taggarna anges precis före symbolnamnet (inga blanksteg tillĂ„ts mellan). Den börjar alltid med en vĂ€nsterparentes ( , slutar med en högerparentes ) , och mĂ„ste innehĂ„lla minst en tagg. Ytterligare taggar avdelas med tecknet | . En tagg kan ha ett vĂ€rde, vilket separeras frĂ„n taggnamnet med tecknet = . Taggnamn och vĂ€rden kan vara godtyckliga strĂ€ngar, förutom att de inte kan innehĂ„lla de speciella tecknen ) | = . Symbolnamn som följer en taggangivelse kan, om sĂ„ önskas, citeras med antingen ’ eller " för att tillĂ„ta blanksteg. Om inga taggar anges för symbolen tolkas dock citattecken som en del av symbolnamnet, vilket fortsĂ€tter till det första blanksteget.

(tag1=jag Àr markerad|taggnamn med blanksteg)"taggad citerad symbol"@Base 1.0
(optional)taggad_ociterad_symbol@Base 1.0 1
otaggad_symbol@Base 1.0

Den första symbolen i exemplet Àr heter taggad citerad symbol och har tvÄ taggar: tag1 med vÀrdet jag Àr markerad och taggnamn med blanksteg som inte har nÄgot vÀrde. Den andra symbolen heter taggad_ociterad_symbol och Àr bara taggad med taggen som heter optional . Den sista symbolen Àr ett exempel pÄ en normal, otaggad symbol.

Eftersom symboltaggar er en utökning av formatet i deb-symbols (5) kan de bara anvÀndas i symbolfiler i kÀllkodspaket (dessa filer Àr att anse som mallar som anvÀnds för att bygga symbolfilerna som finns i binÀrpaketen). NÀr dpkg-gensymbols anropas utan flaggan -t kommer det att mata ut symbolfiler kompatibla med deb-symbols (5)-formatet: det hanterar symboler helt beroende pÄ vad som beskrivs av standardtaggarna och tar bort alla taggar frÄn utdata. I mall-lÀge ( -t ) kommer dÀremot alla symboler och deras taggar (bÄde standard och okÀnda) att behÄllas i utdata och skrivas i sin originalform sÄ som de lÀstes in.

Standardsymboltaggar

optional

En symbol markerad som valfri (optional) kan försvinna frĂ„n bibliotektet nĂ€r som helst och kommer aldrig göra sĂ„ att dpkg-gensymbols misslyckas. Försvunna symboler kommer dock fortfarande visas som saknade (MISSING) i differensen för varje ny paketversion. Detta beteende fungerar som en pĂ„minnelse för de paketansvariga om att symbolen mĂ„ste tas bort frĂ„n symbolfilen eller lĂ€ggas tillbaka till biblioteket. NĂ€r en valfri symbol som tidigare markerats som saknad (MISSING) plötsligt dyker upp igen i en senare version kommer den att uppgraderas tillbaka till befintligstatus (”existing”) med den minsta tillgĂ€ngliga versionen oförĂ€ndrad.

Taggen Àr anvÀndbar för symboler som Àr privata och vars försvinnande inte gör att ABI:et gÄr sönder. De flesta C++-mallinstansieringar faller till exempel in under denna kategori. Som andra taggar kan den hÀr Àven ha ett godtyckligt vÀrde: det kan anvÀndas för att indikera varför symbolen Àr att anse som valfri.

arch= arkitekturlista
arch-bits=
arkitekturlista
arch-endian=
arkitektur-byteordning

Dessaa taggar gör det möjligt att begrĂ€nsa vilken uppsĂ€ttning arkitekturer symbolen Ă€r tĂ€nkt att finnas för. Taggarna arch-bits och arch-endian stöds sedan dpkg 1.18.0. NĂ€r symbollistan uppdateras med symboler som upptĂ€cks i biblioteket behandlas alla arkitekturspecifika symboler som inte gĂ€ller den aktuella vĂ€rdarkitekturen som om de inte fanns. Om en arkitekturspecifik symbol som motsvarar den aktuella vĂ€rdarkitekturen inte existerar i biblioteket gĂ€ller de vanliga reglerna för saknade symboler, och kan fĂ„ dpkg-gensymbols att misslyckas. Å andra sidan, om en arkitekturspecifik symbol hittas dĂ€r den inte var menad att finnas (dĂ„ den aktuella vĂ€rdarkitekturen inte Ă€r listad i taggen eller inte motsvarar byteordningen eller antal bitar), görs den arkitekturneutral (dvs. taggarna arch, arch-bits och arch-endgian tas bort och symbolen kommer finnas med i differensen pĂ„ grund av denna Ă€ndring), men den anses inte som ny.

I det vanliga icke-mall-lĂ€get skrivs endast de arkitekturspecifika symboler som motsvarar den aktuella vĂ€rdarkitekturen till symbolfilen. Å andra sidan skrivs alla arkitekturspecifika symboler (inklusive de frĂ„n andra arkitekturer) till symbolfilen i mall-lĂ€get.

Formatet pÄ arkitekturlista Àr detsamma som det som anvÀnds i Build-Depends -fÀltet i debian/control (bortsett frÄn de omslutande hakparenteserna []). Den första symbolen frÄn listan nedan, till exempel, kommer endast att tas med pÄ arkitekturerna arm64, any-amd64 och riscv64, den andra bara pÄ linux-arkitekturer medan den tredje tas med överallt förutom pÄ armel.

(arch=arm64 any-amd64 riscv64)64bitarsspecifik_symbol@Base 1.0
(arch=linux-any)linuxspecifik_symbol@Base 1.0
(arch=!armel)symbol_armel_inte_har@Base 1.0
I<architecture-bits> Àr antingen B<32> eller B<64>.
(arch-bits=32)32bitarsspecifik_symbol@Base 1.0
(arch-bits=64)64bitarsspecifik_symbol@Base 1.0

architecture-byteordning Àr antingen little eller big .

(arch-endian=little)little_endianspecifik_symbol@Base 1.0
(arch-endian=big)big_endianspecifik_symbol@Base 1.0

Flera begrÀnsningar kan kedjas samman

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

allow-internal

dpkg-gensymbols har en intern svartlista över symboler som inte ska förekomma i symbolfiler eftersom de oftast bara Ă€r sidoeffekter frĂ„n implementationsdetaljer i verktygskedjan (sedan dpkg 1.20.1). Om du, av nĂ„gon orsak, verkligen vill att en av dessa symboler ska tas med i symbolfilen mĂ„ste du tagga symbolen med allow-internal . Det kan vara nödvĂ€ndigt för lĂ„gnivĂ„-verktygskedjebibliotek som ”libgcc”.

ignore-blacklist

Ett alias för allow-internal som avrÄds frÄn (sedan dpkg 1.20.1, stöds sedan dpkg 1.15.3).

c++

Betecknar c++ -symbolmönster. Se stycket "AnvÀnda symbolmönster" nedan.

symver

Anger symver (symbolversion)-symbolmönstret. Se stycket "AnvÀnda symbolmönster" nedan.

regex

Anger regex -symbolmönstret. Se stycket "AnvÀnda symbolmönster" nedan.

AnvÀnda symbolmönster

Till skillnad frÄn vanliga symbolspecifikationer kan ett mönster tÀcka flera faktiska symboler frÄn biblioteket. dpkg-gensymbols kommer försöka matcha varje mönster mot varje faktisk symbol som inte har en motsvarande specifik symbol definierad i symbolfilen. SÄ fort det första mönster som motsvarar symbolen hittas kommer alla dess taggar och egenskaper att anvÀndas som en basspecifikation för symbolen. Om inget mönster motsvarar symbolen kommer den att tolkas som ny.

Ett mönster anses som tappat om det inte motsvarar nÄgra symboler i biblioteket. Som standard kommer detta fÄ dpkg-genchanges att misslyckas om -c1 eller högre anges. Om ett sÄdant misslyckande inte Àr önskvÀrt kan mönstret dock mÀrkas med taggen optional . Om mönstret dÄ inte motsvarar nÄgonting kommer det bara dyka upp i differensen som saknas (MISSING). Mönstret kan dessutom, precis som andra symboler, begrÀnsas till specifika arkitekturer med hjÀlp av arch -taggen. Se stycket "Standardsymboltaggar" ovan för mer information.

Mönster Àr en utökning av deb-symbols (5)-formatet och Àr dÀrför endast tillÄtna i symbolfilmallar. Syntax för angivelse av mönster skiljer sig inte frÄn den för en specifik symbol. Symbolnamnsdelen av specifikationen fungerar dock som ett uttryck som ska jÀmföras mot namn@version för den faktiska symbolen. För att skilja mellan olika sorters mönster, taggas mönster normalt med en speciell tagg.

För nÀrvarande stöder dpkg-gensymbols tre grundlÀggande mönstertyper:

c++

Detta mönster anges med taggen c++ . Den matchar enbart C++-symboler med deras avmanglade symbolnamn (som det skrivs ut av c++ filt (1)-verktyget). Det hĂ€r mönstret Ă€r vĂ€ldigt nyttigt för att matcha symboler vars manglade namn kan skilja sig mellan olika arkitekturer, medan deras avmanglade namn Ă€r desamma. En grupp dylika symboler Ă€r icke-virtuella ”thunks” som har arkitekturspecifika offsetvĂ€rden inbyggda i sina manglade namn. En vanlig instans av detta fall Ă€r en virtuell destruktör som under diamantarv behöver en icke-virtuell ”thunk”-symbol. Även om till exempel ZThn8_N3NSB6ClassDD1Ev@Base pĂ„ 32-bitarsarkitekturer troligtvis Ă€r _ZThn16_N3NSB6ClassDD1Ev@Base pĂ„ 64-bitarsarkitekturer, sĂ„ kan de matchas med ett enda c++ -mönster:

libdummy.so.1 libdummy1 #MINVER#
[...]
(c++)"non-virtual thunk to NSB::ClassD::˜ClassD()@Base" 1.0
[...]
Det avmanglade namnet ovan kan hÀmtas genom att utföra följande kommando:
$ echo '_ZThn8_N3NSB6ClassDD1Ev@Base' | c++filt

Observera att Ă€ven om det manglade namnet per definition Ă€r unikt i biblioteket gĂ€ller inte detta för avmanglade namn. Flera distinkta verkliga symboler kan ha samma avmanglade namn. Det gĂ€ller till exempel för icke-virtuella ”thunk”-symboler i konfigurationer med komplexa arv eller för de flesta konstruktörer och destruktörer (eftersom g++ normalt genererar tvĂ„ symboler för dem). Eftersom dessa kollisioner sker pĂ„ ABI-nivĂ„n bör de dock inte sĂ€nka kvaliteten pĂ„ symbolfilen.

symver

Detta mönster anges med taggen symver . VÀlunderhÄllna bibliotek har versionshanterade symboler dÀr varje version motsvarar uppströmsversionen dÀr symbolen lades till. Om det Àr fallet kan du anvÀnda ett symver -möster för att matcha alla symboler som matchar den specifika versionen. Till exempel:

libc.so.6 libc6 #MINVER#
(symver)GLIBC_2.0 2.0
[...]
(symver)GLIBC_2.7 2.7
access@GLIBC_2.0 2.2
Alla symboler associerade med versionerna GLIBC_2.0 och GLIBC_2.7 kommer leda till den minimal version 2.0 respektive 2.7, med undantag av symbolen access@GLIBC_2.0. Den sistnÀmnda kommer leda till ett minsta beroende pÄ libc6 version 2.2 trots att den motsvarar mönstret "(symver)GLIBC_2.0"-mönstret, eftersom specifika symboler gÀller före mönster.

Observera att Àven om den gamla sortens jokerteckenmönster (anges med "*@version" i symbolnamnfÀltet) fortfarande stöds sÄ rekommenderas de inte lÀngre i och med den nya sortens syntax "(symver|optional)version". Till exempel bör "*@GLIBC_2.0 2.0" skrivas som "(symver|optional)GLIBC_2.0 2.0" om samma beteende behövs.

regex

Mönster med reguljĂ€ra uttryck anges med taggen regex . De matchar med det reguljĂ€ra uttrycket pĂ„ perl-form som anges i symbolnamnsfĂ€ltet. Ett reguljĂ€rt uttryck matchar som det stĂ„r, glöm dĂ€rför inte att inleda det med tecknet ˆ , annars kommer det matcha godtycklig del av den verkliga symbolens namn@version -strĂ€ng. Till exempel:

libdummy.so.1 libdummy1 #MINVER#
(regex)"ˆmystack_.*@Base$" 1.0
(regex|optional)"private" 1.0
Symboler som "mystack_new@Base", "mystack_push@Base", "mystack_pop@Base" osv. kommer att trÀffas av det första mönstret medan "ng_mystack_new@Base" inte gör det. Det andra mönstret motsvarar alla symboler som innehÄller strÀngen "private" i sina namn och trÀffar kommer att Àrva I<optional>-taggen frÄn mönstret.

GrundlÀggande mönster som anges ovan kan kombineras dÀr det Àr vettigt. I sÄ fall behandlas de i den ordning taggarna anges. Till exempel kommer bÄde:

(c++|regex)"ˆNSA::ClassA::Private::privmethod\d\(int\)@Base" 1.0
(regex|c++)N3NSA6ClassA7Private11privmethod\dEi@Base 1.0
att trÀffa symbolerna "_ZN3NSA6ClassA7Private11privmethod1Ei@Base" och "_ZN3NSA6ClassA7Private11privmethod2Ei@Base". NÀr det första mönstret jÀmförs avmanglas först symbolen som en C++-symbol, varefter det avmanglade namnet jÀmförs med det reguljÀra uttrycket. NÀr det andra mönstret jÀmförs, Ä andra sidan, jÀmförs det reguljÀra uttrycket mot det rÄa symbolnamnet, varefter symbolen testas för att se om det Àr av C++-typ genom att försöka avmangla det. Om ett grundlÀggande mönster misslyckas kommer hela uttrycket att misslyckas. DÀrför kommer, till exempel "__N3NSA6ClassA7Private11privmethod\dEi@Base" inte att trÀffas av nÄgot av mönstrena eftersom det inte Àr en giltig C++-symbol.

I allmÀnhet delas alla mönster in i tvÄ grupper. alias (grundlÀggande c++ och symver ) och generella mönster ( regex , samtliga kombinationer av multipla grundlÀggande mönster). Det gÄr snabbt att trÀffa grundlÀggande aliasbaserade mönster (O(1)) medan generella mönster Àr O(N) (N - antal generella mönster) för varje symbol. Det rekommenderas dÀrför inte att anvÀnda för mÄnga generella mönster.

NÀr flera mönster trÀffar samma verkliga symbol föredras alias (först c++ , sedan symver ) framför generella mönster. Generella mönster trÀffas i den ordning de upptÀcktes i symbolfilmallen fram till den första lyckade trÀffen. Observera dock att manuell omsortering av poster i mallfilen inte rekommenderas dÄ dpkg-gensymbols genererar differensfiler baserad pÄ den alfanumeriska sorteringsordningen av dess namn.

AnvÀnda inkluderingar

NÀr uppsÀttningen av exporterade symboler skiljer sig mellan arkitekturer kan det vara ineffektivt att anvÀnda en enda symbolfil. I dessa fall kan ett inkluderingsdirektiv vara nyttigt pÄ flera sÀtt:

‱

Du kan faktorisera de gemensamma delarna i en extern fil och inkludera den filen i din paket .symbols. arkitektur -fil genom att anvÀnda ett inkluderingsdirektiv som detta:

#include "I<paket>.symbols.common"

‱

Inkluderingsdirektivet kan Àven taggas som alla andra symboler:

(tagg|...|taggN)#include "fil-att-inkludera"

Alla symboler som inkluderas frÄn fil-att-inkludera kommer att anses som standard vara taggade med tagg ... taggN . Du kan anvÀnda denna funktion för att skapa en gemensam paket .symbols-fil som inkluderar arkitekturspecifika filer:

gemensam_symbol1@Base 1.0
(arch-bits=64)#include "package.symbols.64-bit"
(arch-bits=32)#include "package.symbols.32-bit"
gemensam_symbol2@Base 1.0

Symbolfilerna lÀses radvis, och inkluderingsdirektiv utförs sÄ fort de upptÀcks. Det betyder att innehÄllet i den inkluderade filen kan överstyra allt innehÄll som förekom före inkluderingsdirektivet och att innehÄll efter direktivet kan överstyra allt frÄn den inkluderade filen. Alla symboler (Àven andra #include-direktiv) i den inkluderade filen kan ange ytterligare taggar eller överstyra vÀrden för de Àrvda taggarna i sin taggspecifikation. Det finns dock inte nÄgot sÀtt för en symbol att ta bort nÄgon av sina Àrvda taggar.

En inkluderad fil kan repetera huvudraden som innehÄller SONAME:t för biblioteket. I sÄ fall överstyr den en eventuell huvudrad som lÀsts in tidigare. Det Àr vanligtvis dock bÀst att undvika att duplicera huvudrader. Ett sÀtt att göra det Àr som följer:

#include "libnÄgonting1.symbols.common"
arkitekturspecifik_symbol@Base 1.0
=head1 SE ÄVEN

deb-symbols (5), dpkg-shlibdeps (1), dpkg-gensymbols (1).

ÖVERSÄTTNING

Peter Krefting och Daniel Nylander.