gcc

architektura

edytuj
 
Potok kompilacji w GCC: preprocesor, asembler i linker
 
Architektura gcc

GCC stosuje 3-etapową architekturę typową dla kompilatorów wielojęzycznych i wieloprocesorowych. Wszystkie drzewa programów są konwertowane na wspólną abstrakcyjną reprezentację na „środkowym końcu”, umożliwiając współdzielenie funkcji generowania optymalnego kodu i kodu binarnego we wszystkich językach.

 
Kroki lexera i parsera wykonane dla prostego programu napisanego w C


Interfejs front end składają się z przetwarzania wstępnego ( ang. preprocessing), analizy leksykalnej, analizy składniowej (parsowania) i analizy semantycznej. Celem interfejsów kompilatora jest akceptowanie lub odrzucanie kandydujących programów zgodnie z gramatyką i semantyką języka, identyfikowanie błędów i obsługa prawidłowych reprezentacji programów na późniejszych etapach kompilatora.

lokalizacja

edytuj

typowa

/usr/bin/gcc


wersje

edytuj

Wersje

  • Możesz mieć kilka wersji gcc na swoim komputerze
  • Pakiet gcc-8 został wycofany z domyślnych repozytoriów Ubuntu 22.04 i nowszych, ale nadal jest dostępny w domyślnych repozytoriach Ubuntu 20.04.[1]

Jeśli są różne wersje

sudo apt search gcc- | more
ls /usr/bin/gcc*

przykładowy wynik:

gcc-10  gcc-12     gcc-ar-11  gcc-nm-10  gcc-nm-12      gcc-ranlib-11
gcc-11  gcc-ar-10  gcc-ar-12  gcc-nm-11  gcc-ranlib-10  gcc-ranlib-12

Zmienna :

MAX_GCC_VERSION=9

sprawdzamy

echo $MAX_GCC_VERSION


sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION


edytuj

Sprawdzamy[2]

ls -la /usr/bin | grep gcc-
ls -la /usr/bin | grep g++-


usuwamy stare symlinki:

rm /usr/bin/gcc
rm /usr/bin/g++

tworzymy nowe:

ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
ln -s /usr/bin/g++-4.3 /usr/bin/g++

i sprawdzamy

ls -la /usr/bin/ | grep gcc
ls -la /usr/bin/ | grep g++

Dodaj dowiązania symboliczne ( ang. symbolic linc) w folderach CUDA:

sudo ln -s /usr/bin/gcc-$MAX_GCC_VERSION /usr/local/cuda/bin/gcc 
sudo ln -s /usr/bin/g++-$MAX_GCC_VERSION /usr/local/cuda/bin/g++

instalacja

edytuj
sudo apt install build-essential
sudo apt -y install gcc-10 g++-10 gcc-11 g++-11 gcc-12 g++-12

Jak przełączać się między wieloma wersjami kompilatorów GCC i G w systemie Ubuntu ?

edytuj

update-alternatives[3]


sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9
 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10


sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Przypisy