Как установить GCC 5 на Debian Jessie 8.1

21

Я перепробовал множество решений, чтобы установить обновление для моего компилятора gcc на сервер Debian. Никто из них не работал. Мне нужно обновление компилятора, чтобы использовать новые функции c ++ 11, поскольку это обеспечивает стабильный ABI libcxx11 и стабильную поддержку C ++ 11 (см. Здесь ). В частности, получение версии GLIBCXX_3.4.21, которая не включена в мою текущую версию 4.9.2 компилятора gcc (Debian 4.9.2-10).

Некоторые указатели на решение будут полезны. Заранее спасибо.

Некоторые ссылки на форум, связанные с моей проблемой, которые я уже пробовал:

1 2 3 (не совсем связанное решение для Ubuntu, но я не смог найти gcc-5 в ftp-сервере Debian)

mluthra
источник
Это предусмотрено в Debian / testing и, как вы видите, включает в себя изменения в библиотеках времени выполнения. Кто-то может порекомендовать вам, как сделать это как пакет Debian, но эффект будет немного отличаться от перехода на конфигурацию тестирования из-за большого количества затронутых пакетов.
Томас Дики
Зачем вам конкретно нужна новая поддержка ABI ? Вы можете собрать большую часть кода C ++ 11 с помощью gcc 4.9.2 Debian 8, вам просто нужно перекомпилировать его после выпуска Debian 9. Если вы не можете ждать, самым простым решением будет переключиться на testing, но это, вероятно, не очень хорошая идея для сервера (в зависимости от того, что вы подразумеваете под сервером, конечно). Переход с gcc 4.9 на gcc 5 связан с переходом библиотеки, так что вам будет больно, если вы попытаетесь сделать это сами!
Стивен Китт
Я согласен с тем, что говорят Томас и Стивен, за исключением того, что меня гораздо меньше беспокоит идея использования тестирования на сервере. Не все серверы требуют долгосрочного одинаковости двоичных файлов и библиотек (что означает «стабильный» в контексте debian), для некоторых серверов более предпочтительным является тестирование с отслеживанием или даже нестабильный (если, скажем, необходимы передовые функции или просто опередить сценарий детишек). Однако выполнение тестирования / нестабильной работы на производственных серверах абсолютно требует больших навыков и знаний о Debian, чтобы исправить случайную поломку. Сначала проверьте обновления на других машинах или виртуальных машинах.
Cas
@cas Я думал не о стабильности двоичных файлов, а о двух основных недостатках testing(используемых сам по себе): пакеты иногда временно удаляются (поэтому настройка, которую вы только что проверили на своей тестовой виртуальной машине, может больше не быть доступной) и исправления безопасности могут быть отложены (иногда на длительное время, если testingпроисходит большой переход библиотеки, хотя есть и testing-securityдля таких случаев).
Стивен Китт
1
Если вы перекомпилируете свою программу в системе Debian (вместо ее копирования), она должна работать нормально.
Стивен Китт

Ответы:

13

Мне нужен GCC 5+, установленный на Debian Jessie, и, поскольку он доступен для тестирования Debian (по крайней мере 16 июня), вы можете использовать apt-pinning для установки доступных пакетов (см. Https://wiki.debian.org/AptPreferences ). ,

Чтобы установить GCC 5+ из тестирования на Debian Jessie с помощью apt-pinning:

  1. Добавьте Debian Testing Reo в ваши исходные коды apt, создав файл в каталоге, /etc/apt/sources.list.dсодержащий строку

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

  2. Поручите debian использовать источники тестирования для определенных пакетов, создав файл, /etc/apt/preferences.dсодержащий следующее:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Обновить базу данных: sudo apt-get update

  4. Установите gcc из тестирования: sudo apt-get install -t testing gcc

    Обратите внимание, что при использовании команды -t testingapt-get вы устанавливаете gcc из тестируемых источников, как было настроено ранее.

Я настоятельно рекомендую очистить любую компиляцию и заново скомпилировать любую зависимость перед повторной компиляцией исходных текстов.

Повеселись!

llekn
источник
1
Я никогда не пробовал это (и при этом я не желаю пробовать это), но ваша процедура интересна. Не многие программные пакеты так тесно связаны со всей системой Debian, как GCC. Ваша процедура действительно работает? Или это вызывает больше проблем, чем решает? Любопытно.
THB
1
Я действительно попробовал это с хорошими результатами: я мог успешно скомпилировать то, что я собирал, и система продолжала работать без проблем. Тем не менее, вы, возможно, были правы: изменение версии GCC может нарушить компиляцию других пакетов (то есть компиляцию исходных текстов при установке пакетов с помощью pip) , но я думаю, что эта процедура наименее инвазивна, потому что aptбудет отслеживать, какие пакеты зависят от GCC, и будет устанавливать совместимые версии по мере необходимости (насколько я помню).
llekn
2
Примечание для шага 2: файл в /etc/apt/preferences.d/ не должен содержать точку "." в имени файла или оканчивается на «.pref». В противном случае этот файл игнорируется. Было бы полезно получить пояснение о значении значения 100 и о том, почему оно было выбрано.
Людвиг Шульце
Как я понимаю, чем больше Pin-Priorityпакет получает, тем больше предпочтений он получит по сравнению с другими пакетами с меньшим числом. Таким образом, как и в состояниях страницы Debian AptPrefences , testingпо умолчанию выполняется установка Pin-Priority: 900всех пакетов testingпо умолчанию. Таким образом, указание, что testingбудет иметь более Pin-Priority: 100низкий testingприоритет пакетов, что делает их устанавливаемыми только в случае запроса при указании цели наapt-get install -t testing ...
llekn
1
@ LeeK-B Действительно, используя Package: gccобновление всей системы до тестирования. Документация по поводу apt-prefencesсбивает с толку, поэтому я полагаю, что именно так и происходит: 1: поскольку пакеты из тестирования имеют более крупные версии, по умолчанию они имеют приоритет над стандартными 2: указание пакета: gccс Pin-priority: 100делает все пакеты из тестирования иметь приоритет по умолчанию (более высокий, чем стандарт) , за исключением gcc. Точно противоположное тому, что мы хотели. Я обновил ответ, чтобы избежать этой ошибки
llekn
6

Чтобы объединить 2 предыдущих ответа в один, который работает:

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

НО!!! Используйте это на свой страх и риск, так как вы устанавливаете пакеты из нестабильных. Вы также можете удалить /etc/apt/sources.list.d/unstable.listпосле установки пакетов.

Если возможно, установите под Docker, чтобы не испортить свою ОС. Ваш пробег может варьироваться.

johndodo
источник
4

По состоянию на 2017-02-19, gcc-5 был снят с тестирования:

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

Вы можете, apt-get install gcc-5если вы сначала выполните эту строку как root:

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

Затем вы, вероятно, захотите изменить приоритет этого источника в /etc/apt/preferences.dсоответствии с ответом llekn.

nachoparker
источник
1

У меня были проблемы на прошлой неделе; похоже, что по состоянию на 2019-01-23 gcc-5 полностью удален из репозиториев. (См. Https://tracker.debian.org/pkg/gcc-5 ).

Если вам это действительно нужно, я полагаю, вы можете скомпилировать его из исходного кода. Я собираюсь найти способ удалить зависимость от моей системы.

JDong
источник