Jak zainstalować GCC 5 na Debianie Jessie 8.1

21

Próbowałem wielu rozwiązań, aby zainstalować aktualizację mojego kompilatora gcc na serwerze debian. Żaden z nich nie działał. Potrzebuję aktualizacji kompilatora, aby korzystać z nowych funkcji c ++ 11, ponieważ zapewnia to stabilną bibliotekę ABI libcxx11 i stabilną obsługę C ++ 11 (patrz tutaj ). W szczególności pobieranie wersji `GLIBCXX_3.4.21 ', która nie jest zawarta w moim obecnym kompilatorze gcc w wersji 4.9.2 (Debian 4.9.2-10).

Pomocne będą niektóre wskaźniki do rozwiązania. Z góry dziękuję.

Niektóre linki do forum związane z moim problemem, który już próbowałem:

1 2 3 (nie do końca spokrewnione rozwiązanie jest dla Ubuntu, ale nie mogłem znaleźć gcc-5 na serwerze ftp Debiana)

mluthra
źródło
Jest to zapewnione w Debianie / testowaniu i, jak widać, obejmuje zmiany w bibliotekach wykonawczych. Ktoś może ci doradzić, jak to zrobić jako pakiet Debiana, ale efekt niewiele by się różnił od przejścia do konfiguracji testowej ze względu na dużą liczbę pakietów, których dotyczy problem.
Thomas Dickey
Dlaczego konkretnie potrzebujesz nowego wsparcia ABI ? Możesz zbudować większość kodu C ++ 11 za pomocą gcc 4.9.2 Debiana 8, wystarczy go ponownie skompilować po wydaniu Debiana 9. Jeśli nie możesz czekać, najłatwiejszym rozwiązaniem byłoby przejście na testing, ale prawdopodobnie nie jest to dobry pomysł na serwerze (w zależności od tego, co rozumiesz przez serwer). Zmiana z gcc 4.9 na gcc 5 wymagała przejścia z biblioteki, więc czeka cię świat bólu, jeśli spróbujesz to zrobić sam!
Stephen Kitt
Zgadzam się z tym, co mówią Thomas i Stephen, ale znacznie mniej martwię się pomysłem użycia testów na serwerze. Nie wszystkie serwery wymagają długoterminowej identyczności plików binarnych i bibliotek (co w kontekście Debiana oznacza „stabilny”), ponieważ niektóre serwery śledzące testy lub nawet niestabilne są bardziej przydatne (jeśli powiedzmy, że potrzebne są najnowocześniejsze funkcje, lub po prostu aby wyprzedzić dzieciaki ze scenariusza). Jednak uruchamianie testów / niestabilnych na serwerach produkcyjnych absolutnie wymaga dużej umiejętności i wiedzy na temat Debiana, aby naprawić sporadyczne awarie. Najpierw przetestuj aktualizacje na innych komputerach lub maszynach wirtualnych.
cas
@cas Nie myślałem o stabilności plików binarnych, ale raczej o dwóch głównych wadach testing(używanych samodzielnie): pakiety są czasami tymczasowo usuwane (więc konfiguracja, którą właśnie sprawdziłeś w testowej maszynie wirtualnej, może nie być już łatwo dostępna) , a poprawki zabezpieczeń mogą być opóźnione (czasami przez długi czas, jeśli testingprzechodzi duże przejście do biblioteki, chociaż istnieją testing-securitytakie przypadki).
Stephen Kitt
1
Jeśli przekompilujesz swój program w systemie Debian (zamiast go kopiować), powinien on działać poprawnie.
Stephen Kitt

Odpowiedzi:

13

Potrzebowałem GCC 5+ zainstalowanego na Debianie Jessie, a ponieważ jest dostępny do testowania Debiana (przynajmniej na 16 czerwca), możesz użyć apt-Pinning do zainstalowania dostępnych pakietów (patrz https://wiki.debian.org/AptPreferences ) .

Aby zainstalować GCC 5+ z testowania Debiana Jessie przy użyciu apt-pinning:

  1. Dodaj repozytorium testowe Debiana do swoich źródeł apt, tworząc plik w katalogu /etc/apt/sources.list.dzawierającym linię

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. Poinstruuj debiana, aby używał źródeł testowych w niektórych pakietach, tworząc plik /etc/apt/preferences.dzawierający następujące elementy:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Zaktualizuj bazę danych apt: sudo apt-get update

  4. Zainstaluj gcc z testowania: sudo apt-get install -t testing gcc

    Zauważ, że używając polecenia -t testing, powiedz apt-get, aby zainstalował gcc ze źródeł testowych skonfigurowanych wcześniej.

Zdecydowanie sugeruję wyczyścić każdą kompilację i ponownie skompilować dowolną zależność przed ponowną kompilacją źródeł.

Baw się dobrze!

llekn
źródło
1
Nigdy tego nie próbowałem (ani nie chcę tego próbować), ale twoja procedura jest interesująca. Niewiele pakietów oprogramowania jest tak ściśle związanych z całym systemem Debian jak GCC. Czy twoja procedura naprawdę działa? Czy może powoduje więcej problemów niż rozwiązuje? Ciekawy.
thb
1
Właściwie wypróbowałem to z dobrymi wynikami: mogłem z powodzeniem skompilować to, co budowałem, a system kontynuował pracę bez żadnych problemów. Niemniej jednak masz rację: zmiana wersji GCC może przerwać kompilowanie innych pakietów (tj. Kompilowanie źródeł podczas instalowania pakietów z pip) , ale myślę, że ta procedura jest najmniej inwazyjna, ponieważ aptśledziłaby, które pakiety zależą od GCC i instaluje kompatybilne wersje w razie potrzeby (o ile pamiętam).
llekn
2
Uwaga do kroku 2: Plik w /etc/apt/preferences.d/ nie powinien zawierać kropki „.” w nazwie pliku lub zakończ na „.pref”. W przeciwnym razie ten plik zostanie zignorowany. Docenione zostanie wyjaśnienie znaczenia wartości 100 i dlaczego została wybrana.
Ludwig Schulze
Jak rozumiem, im więcej Pin-Prioritypakiet otrzyma, tym bardziej będzie on preferencyjny w stosunku do innych pakietów o niższej liczbie. Tak więc, jak w stanach strony AptPrefences Debiana , testingdomyślnie pobiera się instalowanie Pin-Priority: 900wszystkich pakietów testing. Tak, określając, że testingbędzie miał Pin-Priority: 100obniża testingpakiety priorytet czyniąc je instalowalnego tylko wtedy, gdy żądanie określając cel wapt-get install -t testing ...
llekn
1
@ LeeK-B Rzeczywiście, użycie Package: gccuaktualnia cały system do testowania. Dokumentacja na temat apt-prefencesjest niejasna, więc przypuszczam, że tego jest to, co się dzieje: 1: Jak pakiety z testów mają większe wersje, domyślnie mają pierwszeństwo w stosunku do standardowych 2: Określanie opakowaniu: gccz Pin-priority: 100marek wszystkie pakiety z testowania mieć domyślny priorytet (wyższy niż standard) z wyjątkiem gcc. Dokładnie odwrotnie, niż chcieliśmy. Zaktualizowałem odpowiedź, aby uniknąć tego błędu
llekn
6

Aby połączyć 2 poprzednie odpowiedzi w jedną, która działa:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

ALE!!! Użyj tego na własne ryzyko, instalując pakiety z niestabilnej. Możesz także chcieć usunąć /etc/apt/sources.list.d/unstable.listpo zainstalowaniu pakietów.

Jeśli to możliwe, zainstaluj pod Dockerem, aby nie popsuć systemu operacyjnego. Twój przebieg może się różnić.

johndodo
źródło
4

Od 19.02.2017 gcc-5 został usunięty z testów:

https://tracker.debian.org/pkg/gcc-5

Możesz, apt-get install gcc-5jeśli najpierw wykonasz tę linię jako root:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

Następnie prawdopodobnie będziesz chciał zmienić priorytet tego źródła /etc/apt/preferences.dzgodnie z odpowiedzią Llekna.

nachoparker
źródło
1

W zeszłym tygodniu miałem problemy; wygląda na to, że od 23.01.2019 gcc-5 został całkowicie usunięty z repozytoriów. (Zobacz https://tracker.debian.org/pkg/gcc-5 )

Jeśli naprawdę tego potrzebujesz, to możesz go skompilować ze źródła. Zamierzam znaleźć sposób na usunięcie zależności z mojego systemu.

JDong
źródło