Więc zainstalowałem gcc-4.4 i gcc-4.3 (to samo dla g ++). Teraz, o ile pamiętam, w Ubuntu jest narzędzie, które ustawia dla ciebie dowiązania symboliczne, jeśli tylko powiesz mu, jakiej wersji chcesz. Wydaje się jednak, że nie działa w najnowszej wersji, co mnie rozczarowuje.
root@nexus:~# update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc.
root@nexus:~# update-alternatives --config cc
There is only one alternative in link group cc: /usr/bin/gcc
Nothing to configure.
root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'
gcc
gcc-4.3
gcc-4.3-base
gcc-4.3-multilib
gcc-4.4
gcc-4.4-base
gcc-4.4-multilib
gcc-4.5-base
gcc-multilib
lib32gcc1
libgcc1
Jakieś pomysły?
Odpowiedzi:
Najpierw usunąłem bieżącą konfigurację aktualizacji alternatyw dla gcc i g ++:
Zainstaluj pakiety
Wygląda na to, że zarówno gcc-4.3, jak i gcc-4.4 są instalowane po instalacji niezbędnej do kompilacji. Możemy jednak wyraźnie zainstalować następujące pakiety:
Zainstaluj alternatywy
Dowiązania symboliczne cc i c ++ są instalowane domyślnie. Zainstalujemy łącza symboliczne dla gcc i g ++, a następnie połączymy cc i c ++ odpowiednio z gcc i g ++. (Zauważ, że
10
,20
i30
opcje są priorytety dla każdej alternatywy).Skonfiguruj alternatywy
Ostatnim krokiem jest skonfigurowanie domyślnych poleceń dla gcc, g ++. Łatwo jest interaktywnie przełączać się między 4.3 a 4.4:
Lub przełącz za pomocą skryptu:
źródło
wykonać w terminalu:
Okej, więc ta część jest dość prosta. Trudna część polega na tym, że po wydaniu polecenia GCC jest to w rzeczywistości syboliczny link, do którego używasz dowolnej wersji GCC. Oznacza to, że możemy utworzyć symboliczne łącze z GCC do dowolnej wersji GCC, którą chcemy.
źródło
Czy to jest naprawdę pożądane? Istnieją zmiany ABI między
gcc
wersjami. Kompilowanie czegoś w jednej wersji (np. Całego systemu operacyjnego), a następnie kompilowanie czegoś w innej wersji może powodować konflikty.Na przykład, moduły jądra powinny zawsze być kompilowane z tą samą wersją, której
gcc
użyto do kompilacji jądra. Mając to na uwadze, jeśli ręcznie zmieniłeś dowiązanie symboliczne/usr/bin/gcc
i wersję używaną w twojej wersji Ubuntu, przyszłe moduły zbudowane przez DKMS mogą używać niewłaściwejgcc
wersji.Jeśli chcesz po prostu budować rzeczy z inną wersją
gcc
, jest to dość łatwe, nawet przy użyciu skryptów. Na przykład, można przekazać w wersjigcc
wCC
zmiennej środowiskowej:Możesz go nie potrzebować w komendzie make (skrypty konfiguracyjne zwykle go przyciągają), ale to nie boli.
źródło
gcc
nie jest częściąalternatives
systemu i dlaczego nie jest to szczególnie pożądane. Jeśli żadne z nich nie zmieni zdania, po prostu zrób to ręcznie.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Podczas gdysudo update-alternatives gcc gcc-7
upewniłbyś się, że nie zmienisz przypadkowo ABI.Edytować:
Zakłada się, że najpierw zainstalowałeś wersję, np. Z:
Oryginał:
A tutaj jest jeden linijka dla tych, którzy są leniwi, po prostu zmień zmień numer na końcu na żądaną wersję. Wprowadzi zmianę dla gcc i / lub g ++
W tym przykładzie zmieniłem na 4.9
Nie ma sprawdzania błędów i nie ma tego w tym przykładzie, więc możesz chcieć sprawdzić, co zostanie uruchomione przed jego uruchomieniem. Po prostu dodaj echo przed sudo . Dla kompletności podaję również linię kontrolną:
Wynik kontroli powinien być podobny do:
Możesz sprawdzić wersję później za pomocą:
Częściowo szczegółowe wyjaśnienie:
źródło
A co z dowiązaniem symbolicznym w katalogu tymczasowym:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
źródło