Disclaimer: Sunt destul de nou în Ubuntu. Am o experiență rezonabilă cu RHEL și SLES și a trebuit să învăț recent versiunile Ubuntu LTS din cauza hardware-ului ARM64 care nu vrea să pornească nimic altceva.
rezumat
Versiunile Ubuntu vin, într-adevăr, adesea cu unele componente dintr-un GCC ulterioară decât GCC implicit al versiunilor. Se pare că fac acest lucru pentru a putea oferi versiuni ulterioare ale compilatorului, dacă vrei să le folosești.
- Pachetul gcc-10-base oferă doar documentație.
- Pachetul libgcc-s1 oferă o bibliotecă importantă,
libgcc_s.so.1
. Aceasta oferă funcții de ajutor pentru codul generat de compilator: știu că este important pentru gestionarea excepțiilor C++ care sunt aruncate printr-o stivă de apeluri C.
- O altă bibliotecă importantă este
libstdc++.so.6
. Acesta oferă funcții de suport C++.
- Glibc (
libc.so.6
, libm.so.6
și alte biblioteci) este, de asemenea, important, dar nu este legat de o versiune GCC.
Toate aceste biblioteci au reguli de compatibilitate foarte puternice. În esență, o versiune ulterioară a bibliotecii va fi întotdeauna compatibilă cu versiunile anterioare, ignorând unele versiuni antice din istoria timpurie a GCC și Linux.
La început nu este evident de ce Ubuntu și Debian oferă timpi de execuție mai târziu decât compilatorul, dar devine mai clar când te uiți la gama de versiuni GCC disponibile pe versiunile recente Ubuntu LTS:
Distribuție lansată Debian GCC run-times GCC implicite GCC suplimentare
Ubuntu 16.04 aprilie 2016 9.x 5.x 5.4 4.7, 4.8, 4.9
Ubuntu 18.04 aprilie 2018 10.x 8.x 7.5 4.8, 5.5, 6.5. 8.4
Ubuntu 20.04 aprilie 2020 11.x 9.x și 10.x 9.3 7.4, 8.4, 10.3
În acel moment, devine rezonabil de evident. Ubuntu 20.04 are timpii de rulare pentru codul compilat cu GCC 9.x și 10.x (GCC 10.x nu necesită funcții suplimentare de bibliotecă pe care GCC 9.x nu le-a folosit). Puteți instala orice combinație de GCC 7.4, 8.4 și 10.3 ca compilatoare suplimentare și toate vor funcționa. Bibliotecile de rulare de pe Ubuntu 20.04 vor suporta codul compilat cu oricare dintre acele compilatoare.
De ce nu livrați GCC 10.3 cu Ubuntu 20.04? Bibliotecile run-time sunt în general mai stabile decât compilatoarele. GCC 10 ar fi fost lansat pentru prima dată (ca 10.1) cam în momentul în care 20.04 a fost pus împreună. Construirea unei versiuni LTS cu un compilator nou-nouț ar fi nesăbuită; livrarea de noi biblioteci de rulare, după testarea lor cu codul construit cu GCC 9, este mult mai sigură și permite adăugarea GCC 10 atunci când s-a stabilizat.
Canonical nu oferă GCC 11 pentru 20.04, deoarece nu are timpii de rulare necesari. Pentru acestea, aveți nevoie de un Ubuntu mai târziu.
Cum să afli toate aceste lucruri
/usr/share/doc/gcc/README.Debian
are unele informații, iar Ununtu 20.04 se bazează pe Debian 11 âBullseyeâ.
dpkg-query --listfiles gcc-10-base
ne arată că gcc-10-base oferă doar documentație.
dpkg-query --listfiles libgcc-s1
ne arată că libgcc-s1 oferă /lib/x86_64-linux-gnu/libgcc_s.so.1
, care este una dintre bibliotecile de bază de rulare pentru GCC.
Celelalte biblioteci de bază de rulare pentru C/C++ sunt glibc, care este independent de GCC, și libstdc++. dpkg-query -list | grep libstdc
ne arata doua pachete:
ii libstdc++-9-dev:amd64 9.3.0-17ubuntu1~20.04 amd64 GNU Standard C++ Library v3...
ii libstdc++6:amd64 10.3.0-1ubuntu1~20.04 amd64 GNU Standard C++ Library v3
libstdc++6
este versiunea GCC 10.3; cel -dev
pachetul este versiunea GCC 9.3.
dpkg-query --listfiles libstdc++-9-dev
ne arată că acest pachet oferă fișiere antet, biblioteci de arhivă și documentație pentru dezvoltarea în C++ cu GCC 9.
dpkg-query --listfiles libstdc++6
ne arată că acest pachet oferă documentație, câteva scripturi Python și două fișiere cu adevărat importante:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
The .deci.6
fișierul este cu care programele sunt legate. Este de fapt un softlink către .deci.6.028
fişier. Acesta este numele versiunii GCC 10 a libstdc++, biblioteca de suport GCC pentru C++. Puteți obține maparea dintre aceste nume și versiunile GCC Aici. Derulați în jos și veți găsi câteva tabele.