Man page - deb-src-symbols(5)
Packages contains this manual
- deb822(5)
- dpkg-vendor(1)
- deb-symbols(5)
- deb-src-rules(5)
- dpkg-mergechangelogs(1)
- dsc(5)
- deb-src-control(5)
- dpkg-shlibdeps(1)
- dpkg-genbuildinfo(1)
- dpkg-scanpackages(1)
- deb-substvars(5)
- dpkg-parsechangelog(1)
- dpkg-architecture(1)
- deb-triggers(5)
- deb-changelog(5)
- deb-extra-override(5)
- deb-buildinfo(5)
- dpkg-buildpackage(1)
- dpkg-distaddfile(1)
- dpkg-gencontrol(1)
- dpkg-buildtree(1)
- deb-postrm(5)
- deb-version(7)
- deb-prerm(5)
- deb-preinst(5)
- deb-src-files(5)
- dpkg-buildapi(1)
- dpkg-checkbuilddeps(1)
- deb-src-symbols(5)
- deb-old(5)
- dpkg-source(1)
- deb-changes(5)
- deb-origin(5)
- dpkg-buildflags(1)
- deb-override(5)
- deb(5)
- dpkg-scansources(1)
- deb-control(5)
- deb-split(5)
- deb-shlibs(5)
- dpkg-build-api(7)
- deb-postinst(5)
- deb-conffiles(5)
- dpkg-genchanges(1)
- dpkg-gensymbols(1)
- dpkg-name(1)
- deb-md5sums(5)
apt-get install dpkg-dev
Available languages:
en fr pt nl sv deManual
deb-src-symbols
NAMNSYNOPS
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.