Zainstalowałem gcc-3.3 / g ++ - 3.3 na ubuntu 11.04, który ma już gcc / g ++ - 4.4. Więc w moim systemie dostępne są zarówno gcc-3.3, jak i 4.4. Jestem w stanie wywołać oba kompilatory, jak chcę. Jeśli po prostu wywołam polecenie, gcc
zostanie wywołane gcc-4.4. Aby wywołać gcc-3.3, muszę użyć polecenia gcc-3.3
.
Jak mogę zmienić domyślny kompilator na gcc-3.3? Kiedy wykonuję polecenie gcc
, powinno wywołać gcc-3.3, a nie gcc-4.4.
Ponadto, jak mogę zmienić zmienną CXX w pliku make na gcc-3.3? Chciałbym zmienić jedno wspólne globalne miejsce w systemie zamiast zmieniać wszystkie pliki make.
CXX=gcc-3.3
lub,export CXX=gcc-3.3
a wtedy,make
gdy zmienisz ją globalnieupdate-alternatives
, będzie już używać gcc-3.3 i nie jest to konieczne.Odpowiedzi:
Jak zasugerował @Tommy, powinieneś użyć
update-alternatives
.Przypisuje wartości każdemu oprogramowaniu z rodziny, aby określać kolejność wywoływania aplikacji.
Służy do utrzymywania różnych wersji tego samego oprogramowania w systemie. W twoim przypadku będziesz mógł użyć kilku deklinacji
gcc
, a jedna będzie faworyzowana.Aby dowiedzieć się, jakie są aktualne priorytety gcc, wpisz polecenie wskazane w komentarzu @ tripleee:
Teraz zwróć uwagę na przypisany priorytet,
gcc-4.4
ponieważ musisz nadać wyższygcc-3.3
.Aby ustawić alternatywy, powinieneś mieć coś takiego (zakładając, że twoja
gcc
instalacja jest zlokalizowana pod adresem/usr/bin/gcc-3.3
, agcc-4.4
priorytet jest mniejszy niż 50) :update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50
--edytować--
Wreszcie, możesz również skorzystać z interaktywnego interfejsu programu,
update-alternatives
aby łatwo przełączać się między wersjami. Wpiszupdate-alternatives --config gcc
polecenie, aby wybrać wersję gcc, której chcesz użyć spośród zainstalowanych.- edycja 2 -
Teraz, aby naprawić zmienną środowiskową CXX w całym systemie, musisz umieścić linię wskazaną przez @ DipSwitch's w swoim
.bashrc
pliku (zmiana zostanie zastosowana tylko dla twojego użytkownika, co jest moim zdaniem bezpieczniejsze):echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
źródło
cc
:root@host:/root# update-alternatives --get-selections | grep '/usr/bin/gcc' cc auto /usr/bin/gcc
update-alternatives --query gcc
, co może nie działać, np. w automatycznym skrypcie obsługi administracyjnej. Jak można to uczynić agnostykiem platformy?Oto kompletny przykład odpowiedzi jHackTheRipper dla tłumu TL; DR. :-) W tym przypadku chciałem uruchomić g ++ - 4.5 na systemie Ubuntu, który domyślnie ma 4.6. Jako
root
:apt-get install g++-4.5 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50 update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100 update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50 update-alternatives --set g++ /usr/bin/g++-4.5 update-alternatives --set gcc /usr/bin/gcc-4.5 update-alternatives --set cpp-bin /usr/bin/cpp-4.5
Tutaj 4.6 jest nadal domyślnym (inaczej „tryb automatyczny”), ale wyraźnie przełączam się na 4.5 tymczasowo (tryb ręczny). Aby wrócić do 4.6:
update-alternatives --auto g++ update-alternatives --auto gcc update-alternatives --auto cpp-bin
(Zwróć uwagę na użycie
cpp-bin
zamiast po prostucpp
. Ubuntu ma jużcpp
alternatywę z głównym łączem/lib/cpp
. Zmiana nazwy tego łącza spowoduje usunięcie tego/lib/cpp
łącza, co może spowodować uszkodzenie skryptów).źródło
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 100
g++-6
pakietu?__builtin
rzeczami.To jest wspaniały opis i instrukcja krok po kroku, jak tworzyć i zarządzać alternatywami master i slave (gcc i g ++).
Krótko mówiąc:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 sudo update-alternatives --config gcc
źródło
Między 4,8 a 6 ze wszystkimi
--slaves
:update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \ 10 \ --slave /usr/bin/cc cc /usr/bin/gcc-4.8 \ --slave /usr/bin/c++ c++ /usr/bin/g++-4.8 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 \ --slave /usr/bin/gcov gcov /usr/bin/gcov-4.8 \ --slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \ --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \ --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \ --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \ --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8
i
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \ 15 \ --slave /usr/bin/cc cc /usr/bin/gcc-6 \ --slave /usr/bin/c++ c++ /usr/bin/g++-6 \ --slave /usr/bin/g++ g++ /usr/bin/g++-6 \ --slave /usr/bin/gcov gcov /usr/bin/gcov-6 \ --slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \ --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \ --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \ --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \ --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6
Przełączaj się między nimi za pomocą
update-alternatives --config gcc
.źródło
cc
ic++
liniach, które powodują błąd: alternatywne cc nie może być niewolnikiem gcc: jest to główna alternatywaTeraz jest dostępne gcc-4.9 dla Ubuntu / precyzyjne.
Utwórz grupę alternatyw kompilatora, w której kompilator dystrybucji ma wyższy priorytet:
root$ VER=4.6 ; PRIO=60 root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO root$ VER=4.9 ; PRIO=40 root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO
UWAGA: wersja g ++ jest zmieniana automatycznie za pomocą przełącznika wersji gcc. cpp-bin należy wykonać osobno, ponieważ istnieje alternatywa mastera „cpp”.
Lista dostępnych alternatyw kompilatora:
root$ update-alternatives --list gcc root$ update-alternatives --list cpp-bin
Aby ręcznie wybrać wersję 4.9 gcc, g ++ i cpp, wykonaj:
Sprawdź wersje kompilatora:
root$ for i in gcc g++ cpp ; do $i --version ; done
Przywróć ustawienia kompilatora dystrybucji (tutaj: powrót do wersji 4.6):
root$ update-alternatives --auto gcc root$ update-alternatives --auto cpp-bin
źródło
Znalazłem ten problem podczas próby zainstalowania nowego kompilatora Clang. Okazuje się, że zarówno opiekunowie Debiana, jak i LLVM zgadzają się, że system alternatyw powinien być używany do alternatyw, a NIE do wersjonowania .
Proponowane przez nich rozwiązanie wygląda mniej więcej tak:
PATH=/usr/lib/llvm-3.7/bin:$PATH
gdzie /usr/lib/llvm-3.7/bin to katalog utworzony przez pakiet llvm-3.7, zawierający wszystkie narzędzia z ich nazwami bez sufiksów. Dzięki temu llvm-config (wersja 3.7) pojawia się ze swoją zwykłą nazwą w Twojej PATH. Nie ma potrzeby grzebania w dowiązaniach symbolicznych ani wywoływania llvm-config-3.7, który został zainstalowany w / usr / bin.
Poszukaj także pakietu o nazwie llvm-defaults (lub gcc-defaults), który może oferować inny sposób zrobienia tego (nie używałem go).
źródło
Jeśli chcesz szybszego (ale nadal bardzo czystego) sposobu osiągnięcia tego w celach osobistych (na przykład, jeśli chcesz zbudować konkretny projekt z silnymi wymaganiami dotyczącymi wersji kompilatora), wykonaj następujące kroki:
echo $PATH
i poszukaj katalogu osobistego o bardzo wysokim priorytecie (w moim przypadku mam~/.local/bin
);Na przykład:
Oczywiście to zadziała dla jednego użytkownika (nie jest to rozwiązanie systemowe), ale z drugiej strony nie lubię zmieniać zbyt wielu rzeczy w mojej instalacji.
źródło
Użyłem tylko poniższych linii i zadziałało. Chciałem tylko skompilować
VirtualBox
iVMWare WorkStation
użyćkernel 4.8.10
naUbuntu 14.04
. Początkowo większość rzeczy nie działała, na przykład grafika i sieć. Miałem szczęście, żeVMWare workstation
o to prosiłeśgcc 6.2.0
. Nie mogłem uruchomić,Genymotion Android emulators
ponieważ virtualbox nie działa. W razie potrzeby opublikuje wyniki później.VER=4.6 ; PRIO=60 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER VER=6 ; PRIO=50 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER VER=4.8 ; PRIO=40 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
źródło