GCC-14.2.0

Introduksjon til GCC

GCC pakken inneholder GNU kompilatoren samlingen. Denne siden beskriver installasjonen av kompilatorer for følgende språk: C, C++, Fortran, Objective C, Objective C++, Go, og Modula2. Siden C og C++ er installert i LFS, er denne siden enten for å oppgradere C og C++, eller for å installere ekstra kompilatorer.

[Note]

Note

Ytterligere språk, blant annet D og Ada, er tilgjengelige i samlingen. D og Ada har et binært oppstartskrav for den første installasjon, så deres installasjon er ikke beskrevet her. For å installere dem, kan du fortsette på samme måte som nedenfor etter installasjonen av den tilsvarende kompilatoren fra en binær pakke, legg til ada eller d til --enable-languages linjen.

Denne pakken er kjent for å bygge og fungere riktig ved å bruke en LFS 12.2 plattform.

[Caution]

Caution

Hvis du oppgraderer GCC fra en versjon før 14.2.0, da må du være forsiktig med å kompilere 3rd parts kjernemoduler. Du bør sørge for at kjernen og alle dens opprinnelige moduler også er kompilert med samme versjon av GCC som du bruker til å bygge tredjepartsmodulen. Dette problemet påvirker ikke den opprinnelige kjernen (og kjernemoduler) oppdateringer, siden instruksjonene nedenfor er en fullstendig reinstallasjon av GCC. Hvis du har eksisterende tredjepartsmoduler installert, sørg for at de kompileres på nytt med den oppdaterte versjonen av GCC.

Pakkeinformasjon

  • Nedlasting (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-14.2.0/gcc-14.2.0.tar.xz

  • Nedlasting MD5 sum: 2268420ba02dc01821960e274711bde0

  • Nedlastingsstørrelse: 88 MB

  • Estimert diskplass som kreves: 11 GB (3.4 GB installert med alle oppførte språk; legg til 1,5 GB for tester)

  • Estimert byggetid: 14 SBU (legg til 34 SBU for tester; begge med parallellitet=8)

GCC Avhengigheter

Valgfri

GDB-15.1, Graphviz-12.1.0 (noen tester bruker den hvis den er installert; noter at hvis den er installert, men ikke bygget med libpng-1.6.43 disse testene vil mislykkes), Valgrind-3.23.0 (for tester), og ISL (for å aktivere grafittoptimalisering)

Installasjon av GCC

[Important]

Important

Selv om du bare spesifiserer andre språk enn C og C++ til ./configure kommandoen nedenfor, vil installasjonsprosessen overskrive din eksisterende GCC C og C++ kompilatorer og biblioteker. Det anbefales å kjøre hele pakken med tester.

Ikke fortsett med make install kommandoen til du er sikker på at byggingen var vellykket. Du kan sammenligne dine testresultater med de funnet på https://gcc.gnu.org/ml/gcc-testresults/. Du vil kanskje også se informasjonen som finnes i GCC del av kapittel 8 i LFS boken (../../../../lfs/view/12.2-systemd/chapter08/gcc.html).

Instruksjonene nedenfor utfører med vilje en bootstrap prosess. Bootstrapping er nødvendig for robusthet og anbefales sterkt når du oppgraderer kompilatorversjonen. For å deaktivere bootstrap uansett, legg til --disable-bootstrap til ./configure alternativene nedenfor.

Installer GCC ved å kjøre følgende kommandoer:

case $(uname -m) in
  x86_64)
    sed -i.orig '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
  ;;
esac

mkdir build               &&
cd    build               &&

../configure              \
    --prefix=/usr         \
    --disable-multilib    \
    --with-system-zlib    \
    --enable-default-pie  \
    --enable-default-ssp  \
    --enable-host-pie     \
    --disable-fixincludes \
    --enable-languages=c,c++,fortran,go,objc,obj-c++,m2 &&
make

Hvis du kjører tester, som i LFS, fjern/fiks flere kjente testfeil:

sed -e '/cpython/d'               -i ../gcc/testsuite/gcc.dg/plugin/plugin.exp
sed -e 's/no-pic /&-no-pie /'     -i ../gcc/testsuite/gcc.target/i386/pr113689-1.c
sed -e 's/300000/(1|300000)/'     -i ../libgomp/testsuite/libgomp.c-c++-common/pr109062.c
sed -e 's/{ target nonpic } //' \
    -e '/GOTPCREL/d'              -i ../gcc/testsuite/gcc.target/i386/fentryname3.c

Hvis du har installert tilleggspakker som f.eks Valgrind og gdb, gcc delen av testpakken vil kjøre mer tester enn i LFS. Noen av disse vil rapportere FAIL og andre XPASS (bestått når det forventes å FEILE). Fra og med gcc-14.1.0 oppstår omtrent 74 FAIL i guality pakken, samt diverse feil gjennom resten av testpakken. Hvis alle kompilatorene ovenfor er bygget, vil det være litt over 110 uventede feil av over 617,000 tester. For å kjøre testene, utsted:

make -k check

Testene er veldig lange, og resultatene kan være vanskelige å finne i logger, spesielt hvis du bruker parallelle jobber med make. Du kan få et sammendrag av testene med:

../contrib/test_summary

Nå, som root bruker:

make install &&

mkdir -pv /usr/share/gdb/auto-load/usr/lib              &&
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&

chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/14.2.0/include{,-fixed}     &&

ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/14.2.0/liblto_plugin.so \
        /usr/lib/bfd-plugins/

Parameterforklaringer

mkdir build; cd build: GCC dokumentasjon anbefaler å bygge pakken i en dedikert byggemappe.

--disable-multilib: Denne parameteren sikrer at filer opprettes for den spesifikke arkitekturen til datamaskinen din.

--with-system-zlib: Bruker systemets zlib i stedet for den medfølgende. zlib brukes til komprimering og dekomprimering av GCC sin mellomliggende språk i LTO (Link Time Optimization) objektfiler.

--enable-default-pie: Gjør -fpie alternativet standard når du kompilerer programmer. Sammen med ASLR funksjonen aktivert i kjernen, beseirer dette en del angrep basert på kjente minneoppsett.

--enable-default-ssp: Gjør -fstack-protector-strong alternativet standard når du kompilerer programmer. SSP er en teknikk som hindrer endring av programflyten ved å ødelegge parameterstabelen.

--enable-host-pie: Gjør kompilatoren kjørbare PIE (Position Independent Executable). Dette kan brukes til forbedre beskyttelsen mot ROP angrep (Return Oriented Programming), og kan sees på som en del av en bredere trend for å herde binærfiler.

--enable-languages=c,c++,fortran,go,objc,obj-c++,m2: Denne kommandoen identifiserer hvilke språk som skal bygges. Du kan endre denne kommandoen for å fjerne uønskede språk. GCC støtter også Ada og D, men å bygge GCC med Ada (eller D) støtte trenger en eksisterende Ada (eller D) kompilator. Så de er ikke aktivert her

make -k check: Denne kommandoen kjører testpakken uten å stoppe hvis det oppstår feil.

../contrib/test_summary: Denne kommandoen vil produsere et sammendrag av resultatene fra testserien. Du kan legge til | grep -A7 Summ til kommandoen for å produsere en enda mer kondensert versjon av sammendraget. Du kan også ønske å omdirigere utdataene til en fil for gjennomgang og sammenligning senere.

--enable-host-shared --enable-languages=jit: Bygg libgccjit, et bibliotek for å bygge inn GCC i programmer og biblioteker for å generere maskin kode. På tross av JIT (just-in-time) i navnet, biblioteket kan også brukes til AOT (ahead-of-time) kompilering. --enable-host-shared er nødvendig for å bygge libgccjit, men det reduserer GCC betydelig. Så libgccjit bør bli bygget og installert separat, ikke som en del av main GCC installasjon. Hvis du trenger dette biblioteket, konfigurer GCC med disse to alternativene og installer biblioteket ved å kjøre make -C gcc jit.install-common jit.install-info som root bruker. Dette biblioteket brukes ikke av noen BLFS pakker, og er ikke testet av BLFS utviklerne.

mv -v /usr/lib/*gdb.py ...: Installasjonensteg setter noen filer som brukes av gdb under /usr/lib mappen. Dette genererer falske feilmeldinger når du utfører ldconfig. Dette kommandoen flytter filene til et annet sted.

chown -v -R root:root /usr/lib/gcc/*linux-gnu/...: Hvis pakken er bygget av en annen bruker enn root, vil eierskapet til installerte include mappen (og innholdet) vil være feil. Denne kommandoen endrer eierskapet til root bruker og gruppe.

Innhold

Noen program- og biblioteknavn og beskrivelser er ikke oppført her, men du finner dem på LFS seksjonen for GCC siden de opprinnelig var installert under byggingen av LFS.

Installerte Programmer: gccgo, gfortran, gm2, go, og gofmt, hardlenket til arkitektur spesifikke navn
Installerte Biblioteker: libgfortran.{so,a}, libgm2.{so,a} libgo.{so,a}, libgobegin.a, libgolibbegin.a, libobjc.{so,a}, og en rekke andre kjøretidsbiblioteker og kjørbare filer
Installerte Mapper: /usr/lib/go

Korte Beskrivelser

gccgo

er en GCC basert kompilator for Go språket

gm2

er en GCC basert kompilator for Modula-2 språket

go

er et verktøy for å administrere Go kildekode

gofmt

er et verktøy for formatering av Go kildekode

gfortran

er en GCC basert kompilator for Fortran språket