Man page - dpkg-buildflags(1)

Packages contains this manual

Available languages:

en pt nl sv de

Manual

dpkg-buildflags

NAMN
SYNOPS
BESKRIVNING
KOMMANDON
FLAGGOR SOM STÖDS
FUNKTIONSOMRÅDEN
abi
future
qa
optimize
sanitize
hardening
reproducible
MILJÖVARIABLER
FILER
Konfigurationsfiler
Paketeringsstöd
EXEMPEL
AnvÀnda i debian/rules
ÖVERSÄTTNING

NAMN

dpkg-buildflags - returnerar byggflaggor att anvÀnda för att bygga paket

SYNOPS

dpkg-buildflags [ flagga ...] kommando

BESKRIVNING

dpkg-buildflags Àr ett verktyg för att hÀmta kompileringsflaggor att anvÀnda för att bygga Debianpaket.

De förvalda flaggorna anges av leverantören, men de kan utökas/överstyras pÄ flera sÀtt:

1.

pÄ hela systemet med /etc/dpkg/buildflags.conf ;

2.

för den nuvarande anvÀndaren med $XDG_CONFIG_HOME/dpkg/buildflags.conf dÀr $XDG_CONFIG_HOME har standardvÀrdet $HOME/.config ;

3.

temporĂ€rt av anvĂ€ndaren med miljövariabler (se stycket "MILJÖ").

4.

dynamiskt av paketansvariga med miljövariabler som sĂ€tts via debian/rules (se stycket "MILJÖ").

Konfigurationsfilerna kan innehÄlla fyra sorters direktiv:
SET
flagga vÀrde

Överstyr flaggan flagga till att ha vĂ€rdet vĂ€rde .

STRIP flagga vÀrde

Ta bort alla flaggor som listas i vÀrde frÄn flaggan som anges i flagga . Sedan dpkg 1.16.1.

APPEND flagga vÀrde

Utöka flaggan flagga genom att lÀgga till alternativen som anges i vÀrde . Ett blanksteg lÀggs till före vÀrdet om flaggans nuvarande vÀrde inte Àr tomt.

PREPEND flagga vÀrde

Utöka flaggan flagga genom att lÀgga till alternativen som anges i vÀrde först. Ett blanksteg lÀggs till efter vÀrdet om flaggans nuvarande vÀrde inte Àr tomt. Sedan dpkg 1.16.1.

Konfigurationsfilerna kan innehĂ„lla kommentarer pĂ„ rader som börjar med ett nummertecken (#). Även tomma rader ignoreras.

Kommandot introducerades i dpkg 1.15.7..

KOMMANDON

--dump

Skriv alla kompileringsflaggor och deras vĂ€rde pĂ„ standard ut. En flagga skrivs per rad, avdelade frĂ„n sitt vĂ€rde med ett likamedtecken (” flagga = vĂ€rde ”). Detta Ă€r standardĂ„tgĂ€rden.

--list

Skriv ut listan över flaggor som stöds av den aktuella leverantören (en per rad). Se stycket "FLAGGOR SOM STÖDS" för mer information om dem.

--status

Visa information som kan vara anvÀndbar för att förklara dpkg-buildflags beteende (sedan dpkg 1.16.5): relevanta miljövariabler, aktuell ÄterförsÀljare, status för alla funktionsflaggor. Skriv Àven ut slutgiltiga kompilatorflaggor och deras kÀlla.

Detta Àr tÀnkt att köras frÄn debian/rules sÄ att byggloggen innehÄller ett tydligt spÄr över de anvÀnda byggflaggorna. Det kan vara anvÀndbart för att diagnostisera problem rörande dessa.

--export= format

Skriv kommandon som kan anvÀndas för att exportera alla kompileringsflaggor för nÄgot specifikt verktyg. Om format inte anges antas sh . Endast kompileringsflaggor som börjar med en stor bokstav tas med, andra antas att inte vara lÀmpliga för miljön. Format som stöds:

sh

Skalkommandon för att sÀtta och exportera alla kompileringsflaggor i miljön. FlaggvÀrdena citeras sÄ att utdata Àr redo att utvÀrderas av ett skal.

cmdline

Argument att sÀnda till byggprogrammets kommandorad för att anvÀnda alla kompileringsflaggor (sedan dpkg 1.17.0). Flaggornas vÀrde citeras enligt skalsyntax.

configure

Detta Àr ett gammalt alias för cmdline .

make

Make-direktiv för att sÀtta och exportera alla kompileringsflaggor i miljön. Utdata kan skrivas till ett makefil-fragment och utvÀrderas med ett include -direktiv.

--get flagga

Skriv ut vÀrdet pÄ flaggan pÄ standard ut. Avslutar med 0 om flaggan Àr kÀnd, om inte avslutar den med 1.

--origin flagga

Anger ursprunget till flaggan som returneras av --get . Avslutar med 0 om flaggan Àr kÀnd, om inte avslutar med 1. Ursprunget kan vara ett av följande vÀrden:
vendor

originalflagga satt av leverantören returneras;

system

flaggan Àr satt/modifierad av systemkonfigurationen;

user

flaggan Àr satt/modifierad av anvÀndarkonfigurationen;

env

flaggan Àr satt/modifierad av en miljöspecifik konfiguration.

--query

Srkiv ut information som kan vara anvÀndbar för att förklara programmets beteende: aktuell ÄterförsÀljare, relevanta miljövariabler, funktionsomrÄden, status för alla funktionsflaggor, huruvida en funktion hanteras av ett inbyggt förval av kompilatorn (sedan dpkg 1.21.14) och kompilatorflaggorna med sina ursprung (sedan dpkg 1.19.0).

Till exempel:

Vendor: Debian
Environment:
DEB_CFLAGS_SET=-O0 -Wall
Area: qa
Features:
bug=no
canary=no
Builtins:
Area: hardening
Features:
pie=no
Builtins:
pie=yes
Area: reproducible
Features:
timeless=no
Builtins:
Flag: CFLAGS
Value: -O0 -Wall
Origin: env
Flag: CPPFLAGS
Value: -D_FORTIFY_SOURCE=2
Origin: vendor

--query-features omrÄde

Skriv ut funktioner aktiverade för ett givet omrĂ„de (sedan dpkg 1.16.2). Om funktionen hanteras (Ă€ven om bara av nĂ„gra arkitekturer) som ett inbyggt förval av kompilatorn visas fĂ€ltet Bultin (sedan dpkg 1.21.14). Se avsnittet /FUNKTIONSOMRÅDEN för fler detaljer om de omrĂ„den som Ă€r kĂ€nda för nĂ€rvarande. Avslutar med 0 om omrĂ„det Ă€r kĂ€nt, avslutar annars med 1.

Utdata Àr pÄ RFC822-headerformat, med en sektion per funktion. Till exempel:

Feature: pie
Enabled: yes
Builtin: yes
Feature: stackprotector
Enabled: yes

--help

Visar hjÀlpskÀrm och avslutar.

--version

Visar version och avslutar.

FLAGGOR SOM STÖDS

ASFLAGS

Flaggor för vÀrdassemblern. Förvalt vÀrde: tomt. Sedan dpkg 1.21.0.

CFLAGS

Flaggor för vÀrd-C-kompilatorn. StandardvÀrdet som satts av leverantören innehÄller -g och den förvalda optimeringsnivÄn (vanligtvis -O2 , eller -O0 om miljövariabeln DEB_BUILD_OPTIONS definierar noopt ).

CPPFLAGS

Flaggor för vÀrd-C-förprocesseraren. Förvalt vÀrde: tomt.

CXXFLAGS

Flaggor för vÀrd-C++-kompilatorn. Samma som CFLAGS .

OBJCFLAGS

Flaggor för vÀrd-Objective C-kompilatorn. Samma som CFLAGS . Sedan dpkg 1.17.7.

OBJCXXFLAGS

Flaggor för vÀrd-Objective C++-kompilatorn. Samma som CXXFLAGS . Sedan dpkg 1.17.7.

DFLAGS

Flaggor för vÀrd-D-kompilatorn (ldc eller gdc). Sedan dpkg 1.20.6.

FFLAGS

Flaggor för vÀrd-Fortran 77-kompilatorn. En delmÀngd av CFLAGS .

FCFLAGS

Flaggor för vÀrd-Fortran 9x-kompilatorn. Samma som FFLAGS . Sedan dpkg 1.17.7.

LDFLAGS

Flaggor som sÀnds till vÀrdkompilatorn vid lÀnkning av binÀrer eller delade objekt (om lÀnkaren anropas direkt mÄste -Wl och , tas bort frÄn dessa flaggor). StandardvÀrde: tomt.

ASFLAGS_FOR_BUILD

Flaggor för bygg-assemblern. Förvalt vÀrde: tomt. Sedan dpkg 1.22.1.

CFLAGS_FOR_BUILD

Flaggor för bygg-C-kompilatorn. StandardvÀrdet som satts av leverantören innehÄller -g och den förvalda optimeringsnivÄn (vanligtvis -O2 , eller -O0 om miljövariabeln DEB_BUILD_OPTIONS definierar noopt ). Sedan dpkg 1.22.1.

CPPFLAGS_FOR_BUILD

Flaggor för bygg-C-förprocesseraren. Förvalt vÀrde: tomt. Sedan dpkg 1.22.1.

CXXFLAGS_FOR_BUILD

Flaggor för bygg-C++-kompilatorn. Samma som CFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.

OBJCFLAGS_FOR_BUILD

Flaggor för bygg-Objective C-kompilatorn. Samma som CFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.

OBJCXXFLAGS_FOR_BUILD

Flaggor för bygg-Objective C++-kompilatorn. Samma som CXXFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.

DFLAGS_FOR_BUILD

Flaggor för bygg-D-kompilatorn (ldc eller gdc). Sedan dpkg 1.22.1.

FFLAGS_FOR_BUILD

Flaggor för bygg-Fortran 77-kompilatorn. En delmÀngd av CFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.

FCFLAGS_FOR_BUILD

Flaggor för bygg-Fortran 9x-kompilatorn. Samma som FFLAGS_FOR_BUIDL . Sedan dpkg 1.22.1.

LDFLAGS_FOR_BUILD

Flaggor som sÀnds till bygg-kompilatorn vid lÀnkning av binÀrer eller delade objekt (om lÀnkaren anropas direkt mÄste -Wl och , tas bort frÄn dessa flaggor). StandardvÀrde: tomt. Sedan dpkg 1.22.1.

Nya flaggor kan komma att lÀggas till i framtiden om behovet uppstÄr (till exempel för att stöda andra sprÄk).

FUNKTIONSOMRÅDEN

FunktionsomrÄden Àr för nÀrvarande ÄterförsÀljarspecifika, och de som beskrivs nedan Àr de enda som Àr kÀnda pÄ Debian och dess derivat.

Varje omrĂ„desfunktion kan aktiveras och inaktiveras i miljövariablerna DEB_BUILD_OPTIONS och DEB_BUILD_MAINT_OPTIONS :s omrĂ„desvĂ€rde med Ă€ndringsvĂ€rdena ” + ” och ” - ”. Genom att följa den allmĂ€nna syntaxen för dessa variabler (som beskriven i dpkg-buildpackage(1) kan flera funktionsomrĂ„den anges avdelade med blanksteg, dĂ€r var och en fĂ„r funktionsangivelser som nödvĂ€ndiga parametrar efter ett likhetstecken (” = ”). Funktionsangivelserna Ă€r kommaavdelade och tolkas frĂ„n vĂ€nster till höger, dĂ€r instĂ€llningarna inom samma funktionsangivelse överskriver de tidigare, Ă€ven om funktionsangivelserna delas över flera blankstegsavdelade funktionsomrĂ„deinstĂ€llningar för samma omrĂ„de.

För att till exempel aktivera hardening -funktionen ”pie” och inaktivera funktionen ”fortify” kan du göra detta i debian/rules :

export DEB_BUILD_MAINT_OPTIONS = hardening=+pie,-fortify

Den speciella funktionen all kan anvĂ€ndas för att aktivera eller inaktivera alla omrĂ„desfunktioner samtidigt. Du kan till exempel inaktivera allt i omrĂ„det hardening och endast aktivera ”format” och ”fortify” med:

export DEB_BUILD_MAINT_OPTIONS = hardening=-all,+format,+fortify

Flera funktionsomrÄden kan stÀllas in:

export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs

Beteendet för överstyrning gĂ€ller pĂ„ samma sĂ€tt för specialfunktionen all (samtliga) som för specifika funktioner, vilket gör det möjligt att pussla. SĂ„ledes, för att aktivera ”lfs” i omrĂ„det abi och endast ”pie” och ”fortify” i omrĂ„det hardening , men bara ”format” om VILLKOR Ă€r definierat, sĂ„ kan detta göras med:

export DEB_BUILD_MAINT_OPTIONS = hardening=-all,+pie,+format abi=+lfs


DEB_BUILD_MAINT_OPTIONS += hardening=+fortify
ifdef VILLKOR
DEB_BUILD_MAINT_OPTIONS += hardening=-format
endif

abi

Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att aktivera funktioner som kan Àndra ABI:et för ett paket, men som inte kan aktiveras som standard pÄ grund av bakÄtkompatibilitetsorsaker sÄvida de inte samordnas eller kontrolleras var för sig.

lfs

Den hÀr instÀllningen (sedan dpkg 1.22.0; inaktiverad som förval) aktiverar stöd för stora filer pÄ 32-bitars-arkitekturer dÀr deras ABI inte som förval inkluderar LFS, genom att lÀgga till -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 till CPPFLAGS .

NÀr funktionen Àr aktiverad kommer den överstyra vÀrdet frÄn samma funktion i funktionsomrÄdet future .

time64

Den hÀr instÀllningen (sedan dpkg 1.22.0; aktiverad som förval förutom för i386, hurd-i386 och kfreebsd-i386 sedan dpkg 1.22.5) aktiverar stöd för 64-bitars time_t pÄ 32-bitars-arkitekturer dÀr deras ABI inte som förval inkluderar det, genom att lÀgga till -D_TIME_BITS=64 till CPPFLAGS . InstÀllningen aktiverar automatiskt funktionen lfs frÄn funktionsomrÄdet abi .

Om instÀllningen aktiveras explicit aktiveras den för alla arkitekturer, inklusive i386, men inte varken hurd-i386 eller kfreebsd-i386 (dÀr kÀrnan inte har ett grÀnssnitt för 64-bitarstid), och inkluderar förvalet för baklÀngeskompatibilitet.

Det Àr ocksÄ aktiverat som standard pÄ gcc pÄ Debianarkitekturerna armel, armhf, hppa, m68k, mips, mipsel, powerpc och sh4, dÀr istÀllet -U_LARGEFILE_SOURCE -U_FILE_OFFSET_BITS -U_TIME_BITS lÀggs till CPPFLAGS nÀr den hÀr funktionen inaktiveras.

future

Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att aktivera funktioner som borde vara aktiverade som standard, men som inte kan vara det pÄ grund av bakÄtkompatibilitetsorsaker.

lfs

Den hÀr instÀllningen (sedan dpkg 1.19.0; inaktiverad som förval) Àr nu ett alias för funktionen lfs i abi -omrÄdet, anvÀnd den istÀllet. Funktionen frÄn abi -omrÄdet överstyr den hÀr instÀllningen.

qa

Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att göra det lÀttare att hitta problem i kÀllkoden eller byggsystemet.
bug-implicit-func

Den hÀr instÀllningen (sedan dpkg 1.22.3; aktiverad som förval sedan 1.22.6) lÀgger till -Werror=implicit-function-declaration till CFLAGS .

bug

InstÀllningen (sedan dpkg 1.17.4; inaktiverad som förval) lÀgger till ytterligare varningar som pÄlitligt upptÀcket problematisk kÀllkod. Varningarna Àr ödesdigra. De enda flaggor som för nÀrvarande stöds Àr CFLAGS och CXXFLAGS med flaggorna satt till -Werror=array-bounds , -Werror=clobbered , -Werror=implicit-function-declaration och -Werror=volatile-register-var .

Den hÀr funktionen hanterar -Werror=implicit-function-declaration via funktionen bug-implicit-func , om den inte har angivits.

canary

Den hÀr instÀllningen (sedan dpkg 1.17.14; inaktiverad som förval) lÀgger till overksamma tjallarflaggor till byggflaggorna, sÄ att byggloggarna kan kontrolleras för att se hur byggflaggor vidarebefordras för att göra det enklare att hitta nÀr vanliga byggflagor utesluts. De enda flaggor som stöds Àr för nÀrvarande CPPFLAGS , CFLAGS , OBJCFLAGS , CXXFLAGS och OBJCXXFLAGS med flaggorna satta till -D__DEB_CANARY_ flag _ slumpmÀssigt-id __ , och LDFLAGS satt till -Wl,-z,deb-canary- slumpmÀssigt-id .

optimize

Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att hjÀlpa till att optimera den skapade binÀren (sedan dpkg 1.21.0). Observera : Om all aktiveras kan dessa flaggor leda till binÀrartefakter som inte kan reproduceras.

lto

InstÀllningen (sedan dpkg 1.2.0; inaktiverad som förval) aktiverar Link Time Optimization (optimering vid lÀnkning) genom att lÀgga till -flto=auto -ffat-lto-objects till CFLAGS , CXXFLAGS , OBJCXXFLAGS , FFLAGS , FCFLAGS och LDFLAGS .

sanitize

Du kan anvÀnda flera kompileringsflaggor (se detaljer nedan) för att sanera den fÀrdiga binÀren mot minnesfördÀrvningsar, minneslÀckor, anvÀndning efter frigivning, datakapplöpningsfel i trÄdar och fel i förbindels med odefinierat beteende. Observera : Dessa flaggor bör inte anvÀndas för produktionsbygg eftersom de kan minska pÄlitligheten för korrekt kod, minska sÀkerheten eller till och med funktionsrikedomen.
address

Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=address till LDFLAGS och -fsanitize=address -fno-omit-frame-pointer till CFLAGS och CXXFLAGS .

thread

Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=thread till CFLAGS , CXXFLAGS och LDFLAGS .

leak

Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=leak till LDFLAGS . Den inaktiveras automatiskt om antingen funktionen address eller thread aktiveras, eftersom de implicerar den.

undefined

Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=undefined till CFLAGS , CXXFLAGS och LDFLAGS .

hardening

Du kan anvÀnda flera kompileringsflaggor (se detaljer nedan) för att hÀrda den fÀrdiga binÀren mot minnesfördÀrvningsangrepp, eller för att ge ytterligare varningsmeddelanden under kompileringen. Förutom det som anges nedan aktiveras dessa som standard för arkitekturer som stöder dem.
format

InstĂ€llningen (sedan dpkg 1.16.1; aktiverad som förval) lĂ€gger till -Wformat -Werror=format-security till CFLAGS , CXXFLAGS , OBJCFLAGS och OBJCXXFLAGS . Detta kommer att varna om olĂ€mplig anvĂ€ndning av formatstrĂ€ngar, och att misslyckas nĂ€r formatfunktionerna anvĂ€nds pĂ„ ett sĂ€tt som representerar möjliga sĂ€kerhetsproblem. För nĂ€rvarande varnar detta om anrop till funktionerna printf och scanf dĂ€r formatstrĂ€ngen inte Ă€r en fast strĂ€ng och nĂ€r det inte finns nĂ„gra formatargument, som i printf(foo); istĂ€llet för printf("%s", foo); Detta kan vara ett sĂ€kerhetshĂ„l om formatstrĂ€ngen kommer frĂ„n en obetrodd kĂ€lla och innehĂ„ller ”%n”.

fortify

InstĂ€llningen (sedan dpkg 1.16.1; aktiverad som förval) lĂ€gger till -D_FORTIFY_SOURCE=2 till CPPFLAGS . Kompilatorn har under kodgenereringen kĂ€nnedom om en hel del information om buffertstorlekar (dĂ€r tillĂ€mpligt) och försöker ersĂ€tta osĂ€kra funktionsanrop med obegrĂ€nsade buffertlĂ€ngder med lĂ€ngdbegrĂ€nsade dito. Det hĂ€r Ă€r speciellt anvĂ€ndbart för gammal, skrĂ€pig kod. Dessutom blockeras formatstrĂ€ngar i skrivbart minne som innehĂ„ller ”%n”. Om ett program Ă€r beroende av en sĂ„dan formatstrĂ€ng mĂ„ste det gĂ„s runt i kod.

Observera att för att den hÀr flaggan ska ha nÄgon funktion mÄste kÀllkoden ocksÄ kompileras med -O1 eller högre. Om miljövariabeln DEB_BUILD_OPTIONS innehÄller noopt kommer stödet för fortify att inaktiverats, pÄ grund av nya varningar som ges av glibc 2.16 och senare.

stackprotector

InstÀllningen (sedan dpkg 1.16.1; aktiverad som förval om stackprotectorstrong inte anvÀnds) lÀgger till -fstack-protector --param=ssp-buffer-size=4 till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS . Detta lÀgger till sÀkerhetskontroller mot stacköverskrivningar, vilket gör att mÄnga möjliga kodinjiceringsangrepp istÀllet avbryter programmet. I det bÀsta fallet gör det kodinjiceringsangrepp till överbelastnignsangrepp eller icke-problem (beroende pÄ programmet).

Den hÀr funktionen krÀver lÀnkning mot glibc (eller ett annat bibliotek som tillhandahÄller __stack_chk_fail ), sÄ det mÄste inaktiveras nÀr du bygger med -nostdlib eller -ffreestanding eller liknande.

stackprotectorstrong

InstÀllningen (sedan dpkg 1.17.11; aktiverad som förval) lÀgger till -fstack-protector-strong till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS . Detta Àr en starkare variant av stackprotector , men utan markanta prestandaminskningar.

Om du inaktiverar stackprotector inaktiveras Àven denna instÀllning.

Funktionen har samma krav som stackprotector , och krÀver dessutom gcc 4.9 eller senare.

stackclash

InstÀllningen (sedan dpkg 1.22.0; aktiverad som förval) lÀgger till -fstack-clash-protection pÄ amd64 , arm64 , armhf och armel till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS . Detta lÀgger till kod som förhindrar attacker av typen stackkrock.

btacnh

InstÀllningen (sedan dpkg 1.122.0; aktiverad som förval) lÀgger till -fcf-protection pÄ amd64 och -mbranch-protection=standard pÄ arm64 till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS and FCFLAGS och FCFLAGS . Detta lÀgger till förgreningsskydd till indirekta anrop, hopp och returer för att under körning kontrollera att de Àr giltiga.

relro

InstÀllningen (sedan dpkg 1.16.1; aktiverad som förval) lÀgger till -Wl,-z,relro till LDFLAGS . Vid inlÀsning av programmet mÄste lÀnkaren skriva till flera ELF-minnessektioner. Den hÀr instÀllningen flaggar till inlÀsaren att dessa sektioner ska göras skrivskyddade innan programmet fÄr kontroll. Detta skyddar huvudsaklingen mot GOT-överskrivningsangrepp. Om instÀllningen inaktiveras kommer Àven bindnow att inaktiveras.

bindnow

InstÀllningen (sedan dpkg 1.16.1; inaktiverad som förval) lÀgger till -Wl,-z,now till LDFLAGS . Vid inlÀsning av programmet löses alla dynamiska symboler, vilket gör att hela PLT kan markeras som skrivskyddad (pÄ grund av relro ovan). InstÀllningen kan inte aktiveras om relro inte Àr aktiverad.

pie

Den hÀr instÀllningen (sedan dpkg 1.16.1; utan globalt förval sedan dpkg 1.18.23, eftersom den aktiveras som förval numera av gcc pÄ Debianarkitekturerna amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc och sparc64) lÀgger till de flaggor som krÀvs för att aktivera eller inaktivera PIE via gcc-specifikationsfiler, om det behövs, beroende pÄ om gcc lÀgger till flaggorna sjÀlv pÄ arkitekturen eller inte. Om instÀllningen aktiveras och gcc injicerar flaggorna lÀgger den inte till NÄgonting. Om instÀllningen Àr aktiverad och gcc inte injicerar flaggorna, lÀgger den till -fPIE (via /usr/share/dpkg/pie-compiler.specs ) till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS , samt -fPIE -pie (via /usr/share/dpkg/pie-link.specs ) till LDFLAGS . NÀr instÀllningen Àr inaktiverad och gcc injicerar flaggorna, lÀgger den till -fno-PIE (via /usr/share/dpkg/no-pie-compile.specs ) till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS , samt -fno-PIE -no-pie (via /usr/share/dpkg/no-pie-link.specs ) till LDFLAGS .

Positionsoberoende exekverbara program (PIE) behövs för att dra fördel av slumpmÀssig adressrymd (ASLR), vilket stöds av vissa versioner av kÀrnan. Medan ASLR redan kan anvÀndas för datautrymmen i stacken och heap:en (brk och mmap), mÄste kodomrÄden först kompileras som positionsoberoende. Delade bibliotek gör redan detta (-fPIC), sÄ de drar automatiskt fördel av ASLR medan binÀra .text-regioner mÄste byggas med PIE för att uppnÄ ASLR. NÀr detta sker Àr ROP-angrepp (Return Oriented Programming) mycket svÄrare eftersom det inte finns nÄgra statiska platser att studsa frÄn i ett minnesfördÀrvningsangrepp.

PIE Àr inte kompatibelt med -fPIC , sÄ allmÀn försiktighet mÄste tas vid bygge av delade objekt. Men eftersom PIE-flaggorna som skapas injiceras via gcc-specifikationsfiler bör det alltid vara sÀkert att ovillkorligen sÀtta dem oberoende av typen av objekt som kompileras eller lÀnkas.

Statiska bibliotek kan anvÀndas av program eller andra delade bibliotek. Beroende pÄ vilka flaggor som anvÀnds för att kompilera objekten inuti ett statisk bibliotek kan dessa vara anvÀndas av olika uppsÀttningar objekt:
inget

Kan varken lÀnkas till ett PIE-program eller ett delat bibliotek.

-fPIE

Kan lÀnkas till alla program, men inte ett delat bibliotek (rekommenderas).

-fPIC

Kan lÀnkas till alla program och delade bibliotek.

Om flaggorna behöver sÀttas manuellt och gcc:s spec-injektion förbigÄs, finns det flera saker man behöver tÀnka pÄ. Att ovillkorligen och explicit sÀnda -fPIE , -fpie eller -pie till ett byggsystem som anvÀnder libtool Àr sÀkert eftersom flaggorna kommer skalas av nÀr delade bibliotek byggs. PÄ projekt som bygger bÄde program och delade bibliotek kan du annars behöva se till att -fPIC alltid sÀnds sist i kompileringsflaggor sÄsom CFLAGS nÀr delade bibliotek byggs (sÄ att den överstyre en tidigare angiven -PIE ), och att -shared sÀnds sist till lÀnkflaggor sÄsom LDFLAGS (sÄ att den överstyr en tidigare angiven -pie ). Observera : Detta behöver inte göras med standard-gcc-specifikationsmaskineriet.

Eftersom PIE i tillÀgg implementeras med ett generellt register kan vissa arkitekturer med fÄ register (men inte lÀngre i386 eftersom optimeringar implementerats i gcc >= 5) se prestandaförluster upp till 15% i vÀldigt textsegment-tunga programs körning; de flesta körningar ser mindre Àn 1%. Arkitekturer med mÄnga generella register (t.ex amd64) ser inte en lika stor vÀrsta falls-förlust.

reproducible

Kompileringsflaggorna som anges nedan kan anvÀndas för att göra det lÀttare att reproducera byggbarhet eller tillhandahÄlla ytterligare varningsflaggor under kompileringen. Förutom det som anges nedan aktiveras dessa som standard för arkitekturer som stöder dem.
timeless

InstÀllningen (sedan dpkg 1.17.14; aktiverad som förval) lÀgger till -Wdate-time till CPPFLAGS . Detta ger varningar nÀr makrona __TIME__ , __DATE__ eller __TIMESTAMP__ anvÀnds.

fixfilepath

InstĂ€llningen (sedan dpkg 1.19.1; aktiverad som förval) lĂ€gger till -ffile-prefix-map= BYGGSÖKVÄG =. till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS dĂ€r BYGGSÖKVÄG sĂ€tts till toppnivĂ„katalogen för paketet som byggs. Detta fĂ„r till effekt att byggsökvĂ€gen försvinner frĂ„n alla genererade filer.

Om bÄde fixdebugpath och fixfilepath anges tar denna flagga företrÀde, eftersom den Àr en övermÀngd av den förstnÀmnda.

Observera : Om byggprocessen fÄngar byggflaggorna i de slutliga byggobjekten kommer det att göra paketet oreproducerbart. Och Àven om nÄgra av objekten Äterigen kan göras reproducerbara genom att inaktivera den hÀr flaggan igen krÀver det samtidigt att fixdebugpath inaktiveras, vilket kan göra de genererade felsökningssymbolobjekten oreproducerbara. Den bÀsta lösningen Àr att sluta fÄnga byggflaggor.

fixdebugpath

InstĂ€llningen (sedan dpkg 1.18.5; aktiverad som förval) lĂ€gger till -fdebug-prefix-map= BYGGSÖKVÄG =. till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS dĂ€r BYGGSÖKVÄG sĂ€tts till toppnivĂ„katalogen för paketet som byggs. Detta fĂ„r till effekt att byggsökvĂ€gen försvinner frĂ„n alla genererade felsökningssymboler.

Observera : Funktionen har liknande reproduktionsegenskaper som fixfilepath .

MILJÖVARIABLER

Det finns tvÄ uppsÀttningar miljövariabler som utför samma operationer, den första (DEB_ flagga _ op ) bör aldrig anvÀndas inuti debian/rules ). Den Àr tÀnkt för anvÀndare som vill bygga om kÀllkodspaketet med andra byggflaggor. Den andra uppsÀttningen (DEB_ flagga _MAINT_ op ) bör endast anvÀndas i debian/rules av paketansvariga för att Àndra de slutgiltiga byggflaggorna.
DEB_
flagga _SET
DEB_
flagga _MAINT_SET (Sedan dpkg 1.16.1)

Denna variabel kan anvÀndas för att tvinga fram vÀrdet som returneras för given flagga .

DEB_ flagga _STRIP (sedan dpkg 1.16.1)
DEB_
flagga _MAINT_STRIP (sedan dpkg 1.16.1)

Denna variabel kan anvÀndas för att tillhandahÄlla en blankstegsavdelad lista med flaggor som kommer att tas bort frÄn uppsÀttningen flaggor som ges för given flagga .

DEB_ flagga _APPEND
DEB_
flagga _MAINT_APPEND (sedan dpkg 1.16.1)

Denna variabel kan anvÀndas för att lÀgga till ytterligare flaggor till vÀrdet som returneras för given flagga .

DEB_ flagga _PREPEND (sedan dpkg 1.16.1)
DEB_
flagga _MAINT_PREPEND (sedan dpkg 1.16.1)

Denna variabel kan anvÀndas för att lÀgga till ytterligare flaggor först i vÀrdet som returneras för given flagga .

DEB_BUILD_OPTIONS
DEB_BUILD_MAINT_OPTIONS
(sedan dpkg 1.16.1)

De hĂ€r variablerna kan anvĂ€ndas av en anvĂ€ndare eller utvecklare för att slĂ„ av/pĂ„ olika omrĂ„desfunktioner som pĂ„verkar byggflaggorna. Variabeln DEB_BUILD_MAINT_OPTIONS -variabeln överstyr alla instĂ€llningar i funktionsomrĂ„den i DEB_BUILD_OPTIONS . Se avsnittet "FUNKTIONSOMRÅDEN" för mer information.

DEB_VENDOR

InstÀllningen anger den aktuella ÄterförsÀljaren. Om den inte Àr satt kommer ÄterförsÀljaren att identifieras genom att lÀsa /etc/dpkg/origins/default .

DEB_BUILD_PATH

Den hÀr variabeln anger byggsökvÀgen (sedan dpkg 1.18.8) att anvÀnda i funktioner sÄsom fixdebugpath sÄ att de kan styras av anroparen. Variabeln Àr för nÀrvarande specifik för Debian och dess derivat.

DEB_HOST_ARCH

Anger vÀrdarkitekturen. Detta pÄverkar de byggflagor som anges, vilket vanligtvis Àr relvant vid korskompilering, dÀr DEB_HOST_ARCH skiljer sig frÄn DEB_BUILD_ARCH .

DPKG_COLORS

VÀljer fÀrglÀge (sedan dpkg 1.18.5). För nÀrvarande godtas följande vÀrden: auto (förval), always och never .

DPKG_NLS

Om satt, anvÀnds för att bestÀmma om lokalt sprÄkstöd ska aktiveras, Àven kÀnt som internationaliseringsstöd (eller i18n) (sedan dpkg 1.19.0). TillÄtna vÀrden Àr: 0 och 1 (förval).

FILER

Konfigurationsfiler

/etc/dpkg/buildflags.conf

Konfigurationsfil för hela systemet.

$XDG_CONFIG_HOME/dpkg/buildflags.conf eller
$HOME/.config/dpkg-buildflags.conf

AnvÀndarens konfigurationsfil.

Paketeringsstöd

/usr/share/dpkg/buildflags.mk

Makefile-klipp som lÀser in (och eventuellt exporterar) alla flaggor som stöd av dpkg-buildflags till variabler (sedan dpkg 1.16.1).

/usr/share/dpkg/buildtools.mk

Makefile-klipp som lÀser in lÀmplig vÀrd och byggverktyg (och eventuellt exporterar dem) till variabler (sedan dpkg 1.19.0).

EXEMPEL

För att sÀnda byggflaggor till en byggkommandorad i en makefil:

$(MAKE) $(shell dpkg-buildflags --export=cmdline)
./configure $(shell dpkg-buildflags --export=cmdline)

För att sÀtta byggflaggor i ett skalskript eller skalfragment kan eval anvÀndas för att tolka utdata och exportera flaggorna i miljön:

eval "$(dpkg-buildflags --export=sh)" && make

eller för att sÀtta positionsparametrarna för att sÀnda till ett kommando:

eval "set -- $(dpkg-buildflags --export=cmdline)"
for dir in a b c; do (cd $dir && ./configure "$@" && make); done

AnvÀnda i debian/rules

Du bör anropa dpkg-buildflags eller inkludera buildflags.mk frÄn filen debian/rules för att hÀmta de byggflaggor det Àr nödvÀndigt att sÀnda till byggsystemet. Observera att Àldre versioner av dpkg-buildpackages (före dpkg 1.16.1) exporterade dessa flaggor automatiskt. Du bör dock inte bero pÄ detta, eftersom detta förhindrar körning av debian/rules manuellt.

För paket med autoconf-liknande byggsystem kan du sÀnda relevanta flaggor direkt till configure eller make (1), som visas ovan.

I andra byggsystem, eller om du vill ha mer finkorning styrning av vilka flaggor som sÀnds vart, kan du anvÀnda --get . Eller sÄ kan du istÀllet inkludera buildflags.mk , som tar hand om anropet till dpkg-buildflags och lagringen av byggflaggorna i make-variabler.

Om du vill exportera alla byggflaggor till miljön (dÀr de kan fÄngas upp av ditt byggsystem):

DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

För extra styrning av vad som expoteras kan du manuellt exportera variablerna (eftersom inga av dem exporteras som standard):

include /usr/share/dpkg/buildflags.mk
export CPPFLAGS CFLAGS LDFLAGS

Du kan naturligtvis dessutom manuellt sÀnda flaggorna till kommandon:

include /usr/share/dpkg/buildflags.mk
build-arch:
$(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)

ÖVERSÄTTNING

Peter Krefting och Daniel Nylander.