Comment installer GCC 5 sur Debian Jessie 8.1


21

J'ai essayé de nombreuses solutions pour installer la mise à jour de mon compilateur gcc sur le serveur Debian. Aucun n'a fonctionné. J'ai besoin de la mise à jour du compilateur pour utiliser les nouvelles fonctionnalités de c ++ 11, car cela fournit une libcxx11 ABI stable et un support stable pour C ++ 11 (voir ici ). Obtenir spécifiquement la version `GLIBCXX_3.4.21 'qui n'est pas incluse dans mon compilateur actuel gcc version 4.9.2 (Debian 4.9.2-10).

Quelques conseils sur la solution seront utiles. Merci d'avance.

Quelques liens vers des forums liés à mon problème que j'ai déjà essayés:

1 2 3 (la solution n'est pas entièrement liée à Ubuntu, mais je n'ai pas encore trouvé gcc-5 dans le serveur ftp de debian)


Cela est fourni dans Debian / testing, et comme vous le voyez, implique des changements dans les bibliothèques d'exécution. Quelqu'un pourrait vous conseiller sur la façon de procéder en tant que paquet Debian, mais l'effet serait peu différent du passage à la configuration de test en raison du grand nombre de paquets affectés.
Thomas Dickey

Pourquoi avez-vous spécifiquement besoin du nouveau support ABI ? Vous pouvez construire la plupart du code C ++ 11 avec gcc 4.9.2 de Debian 8, vous aurez juste besoin de le recompiler lorsque Debian 9 sera publié. Si vous ne pouvez pas attendre, la solution la plus simple serait de passer à testing, mais ce n'est probablement pas une bonne idée sur un serveur (selon ce que vous entendez par serveur bien sûr). Le passage de gcc 4.9 à gcc 5 impliquait une transition de bibliothèque, vous êtes donc dans un monde de douleur si vous essayez de le faire vous-même!
Stephen Kitt

Je suis d'accord avec ce que disent Thomas et Stephen, sauf que je suis beaucoup moins inquiet à l'idée d'utiliser des tests sur un serveur. Tous les serveurs ne nécessitent pas une similitude à long terme des fichiers binaires et des bibliothèques (ce que signifie «stable» dans le contexte Debian), pour certains serveurs, le suivi des tests ou même instable est plus utile (si, par exemple, des fonctionnalités de pointe sont nécessaires, ou tout simplement pour garder une longueur d'avance sur les script kiddies). Cependant, exécuter testing / unstable sur des serveurs de production nécessite absolument beaucoup de compétences et de connaissances sur Debian pour corriger les pannes occasionnelles. Testez d'abord les mises à niveau sur d'autres machines ou machines virtuelles.
cas

@cas Je ne pensais pas à la stabilité des binaires, mais plutôt aux deux principaux inconvénients de testing(utilisé seul): les packages sont parfois temporairement supprimés (donc la configuration que vous venez de valider dans votre VM de test peut ne plus être facilement disponible) , et les correctifs de sécurité peuvent être retardés (parfois pendant une longue période s'il testingsubit une grande transition de bibliothèque, bien qu'il y en ait testing-securitypour de tels cas).
Stephen Kitt

1
Si vous recompilez votre programme sur le système Debian (au lieu de le copier), cela devrait fonctionner correctement.
Stephen Kitt

Réponses:


13

J'avais besoin que GCC 5+ soit installé sur Debian Jessie et, comme c'est disponible pour les tests Debian (au moins le 16 juin), vous pouvez utiliser apt-pinning pour installer les paquets disponibles là-bas (voir https://wiki.debian.org/AptPreferences ) .

Pour installer GCC 5+ à partir de tests sur Debian Jessie à l'aide d'apt-pinning:

  1. Ajoutez le référentiel de test Debian à vos sources apt en créant un fichier dans le répertoire /etc/apt/sources.list.dcontenant la ligne

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

  2. Demandez à Debian d'utiliser des sources de test sur certains paquets en créant un fichier /etc/apt/preferences.dcontenant les éléments suivants:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Mettre à jour la base de données apt: sudo apt-get update

  4. Installez gcc à partir des tests: sudo apt-get install -t testing gcc

    Notez qu'en utilisant, -t testingvous dites à apt-get d'installer gcc à partir de sources de test configurées précédemment.

Je suggère fortement de nettoyer toute compilation et de recompiler toute dépendance avant de compiler à nouveau vos sources.

S'amuser!


1
Je n'ai jamais essayé cela (je ne souhaite pas non plus l'essayer), mais votre procédure est intéressante. Peu de suites logicielles sont aussi étroitement liées et intégrées à l'ensemble du système Debian que GCC. Votre procédure fonctionne-t-elle vraiment? Ou cela cause-t-il plus de problèmes qu'il n'en résout? Curieuse.
thb

1
En fait, j'ai essayé avec de bons résultats: j'ai pu compiler avec succès ce que je construisais et le système a continué à fonctionner sans problème.Néanmoins, vous avez peut-être raison: changer la version de GCC pourrait interrompre la compilation d'autres packages (c'est-à-dire la compilation de sources lors de l'installation de packages avec pip) , mais je pense que cette procédure est la moins invasive car elle aptpermettrait de garder une trace des packages qui dépendent de GCC et d'installer des versions compatibles selon les besoins (pour autant que je m'en souvienne).
llekn

2
Remarque pour l'étape 2: Le fichier dans /etc/apt/preferences.d/ ne doit pas non plus contenir de point "." dans le nom du fichier, ou se terminent par ".pref". Sinon, ce fichier est ignoré. Une explication de la signification de la valeur 100 et de la raison pour laquelle elle a été choisie serait appréciée.
Ludwig Schulze

Si je comprends bien, plus Pin-Priorityun paquet obtient, plus il aura de préférence sur d'autres paquets avec un nombre inférieur. Ainsi, comme dans les états de la page AptPrefences de Debian , testingpar défaut, Pin-Priority: 900tous les paquets testingdoivent être installés par défaut. Donc, en spécifiant que la priorité des packages testingsera Pin-Priority: 100inférieure testing, les rendre installables uniquement si cela est demandé lors de la spécification de la cible auapt-get install -t testing ...
llekn

1
@ LeeK-B En effet, l'utilisation Package: gccmet à niveau l'ensemble du système vers les tests. La documentation sur apt-prefencesest déroutante donc je suppose que c'est ce qui se passe: 1: Comme les packages de testing ont des versions supérieures, par défaut ils ont priorité sur les versions standard 2: Spécification de Package: gccavec Pin-priority: 100fait que tous les packages de testing ont la priorité par défaut (supérieure à standard) sauf gcc. Exactement le contraire que nous voulions. J'ai mis à jour la réponse pour éviter cette erreur
llekn

6

Pour combiner les 2 réponses précédentes en une seule qui fonctionne:

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

MAIS!!! Utilisez-le à vos risques et périls lorsque vous installez des packages à partir d'unstable. Vous pouvez également vouloir supprimer /etc/apt/sources.list.d/unstable.listune fois que vous avez installé les packages.

Si possible, installez-le sous Docker pour ne pas gâcher votre système d'exploitation. Votre kilométrage peut varier.


4

Depuis le 2017-02-19, gcc-5 a été retiré des tests:

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

Vous pouvez apt-get install gcc-5si vous exécutez d'abord cette ligne en tant que root:

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

Ensuite, vous voudrez probablement changer la priorité de cette source /etc/apt/preferences.dselon la réponse de llekn.


1

J'avais des problèmes la semaine dernière; il semble qu'à compter du 2019-01-23, gcc-5 a été complètement supprimé des référentiels. (Voir https://tracker.debian.org/pkg/gcc-5 )

Si vous en avez vraiment besoin, je suppose que vous pouvez le compiler à partir de la source. Je vais trouver un moyen de supprimer la dépendance de mon système.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.