Cette question semble être traitée correctement dans plusieurs questions et dans d'autres endroits faciles à trouver avec Google, mais je ne trouve pas la solution satisfaisante pour les raisons expliquées ci-dessous. Mais juste pour terminer, j'ai inclus quelques liens pertinents:
/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -some-package / 428778 /ubuntu/26498/choose-gcc-and-g-version ...
Et d'autres.
Cependant, cette question concerne l'installation d'une version très spécifique de GCC dans Kali Linux, qui ne semble pas facilement disponible en tant que package spécifique. En particulier, la question est de savoir comment installer la version 6.3.0, car j'ai besoin de cette version pour compiler un programme particulier: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/
(en tant que question bonus, s'il existe un moyen plus sensé de résoudre ce problème particulier sans utiliser une version différente de GCC, n'hésitez pas à répondre, mais je pense que cette question est générale et je voudrais savoir comment le faire indépendamment de comment faire correctement le lien du programme susmentionné)
Les versions disponibles pour l'installation de n'importe quel paquet, par exemple gcc, peuvent être déterminées avec:
apt-cache showpkg gcc
Qui listera les versions disponibles sous "versions:", par exemple
4:7.2.0-1d1
4:4.9.2-2
L'installation est alors aussi simple que l'émission
apt-get install gcc:4:4.9.2-2
Cela installera l'ancienne version 4: 4.9.2-2, en écrasant simplement (je crois) l'installation 7.2.0-1d1, si elle est présente.
Pour que la version 4: 4.9.2-2 soit disponible, j'ai dû ajouter deb
http://old.kali.org/kali sana main non-free contrib
à mon
/etc/apt/sources.list
fichier, puis exécuter apt-get update
.
Cependant, que se passe-t-il si la version dont j'ai besoin n'est pas répertoriée?
J'ai expérimenté différentes sources, par exemple celles trouvées ici: http://snapshot.debian.org/ et sur diverses autres questions et sites Web issus de recherches Google.
La plupart d'entre eux me donnent ignorer ou des erreurs, par exemple comme suit
Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease
Même si cela fonctionnait, il semble que ce soit une très mauvaise approche pour installer une version particulière, car l'ajout d'une source arbitraire pourrait ne pas avoir la version particulière que je veux.
Si je recherche gcc sur snapshot.debian.org, je n'obtiens que des versions très anciennes: http://snapshot.debian.org/package/gcc/
J'ai finalement été frustré par cette approche et j'ai compilé GCC 6.3.0 à partir de l'archive tar source. La compilation a été réussie, mais je me demande alors comment l'installer. Je suis prudent sur l' exécution make install
que je crains qu'il ne falsifier apt
et dpkg
et éventuellement briser le système.
Au lieu de cela, j'ai essayé de l'exécuter directement depuis le répertoire de génération. J'ai essayé d'ajouter simplement le répertoire de construction comme première entrée dans mon PATH, ce qui n'a pas fonctionné. Ensuite, j'ai tenté de renommer /usr/bin/gcc
et de créer un lien symbolique à partir /usr/bin/gcc
de l'emplacement de mon exécutable gcc-6.3.0. Cela présente le problème suivant:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
Cela a été corrigé avec une autre entrée dans mon CHEMIN.
Ensuite, je reçois cette erreur:
/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory
Ce que je suppose est dû à une entrée manquante dans /usr/lib/gcc/x86_64-linux-gnu
. J'ai essayé de créer un lien symbolique de 6 vers 6.3.0, mais ce n'était pas suffisant. J'ai aussi essayé de tout copier avec le cp -R
même résultat.
Cela devrait être un programme 64 bits, mais j'ai également considéré la même chose pour
/usr/lib/gcc/i686-linux-gnu
.
Je suis sûr que je pourrais commencer strace
à voir d'où il tente d'ouvrir les fichiers, lire les fichiers journaux, lire la source, et finalement j'imagine que je serais en mesure de comprendre comment pirater ensemble une solution mal conçue. Mais ce serait bien si quelqu'un pouvait me dire comment faire cela de manière saine.
la source
Réponses:
GCC 6 est disponible sur kali linux, il peut être installé comme suit:
Pour basculer entre gcc6 et gcc7
exemple de sortie:
Sélectionnez votre
gcc
version par défaut .le 2017-08-05, la version gcc-6 est mise à niveau de
6.3.0
à6.4.0
.Construire une version gcc spécifique
6.3.0
Téléchargez l'archive tar du miroir le plus proche : GCC Releases
Ajouter
gcc-6.3
àupdate-alternatives
Important : L'
--disable-multilib
option est requise pour configurer et construiregcc
pour l'architecture actuelle.GCC WIKI: Installation de GCC
la source
6.3.0
, maintenant la version gcc6 est mise à niveau vers6.4.0
.Maintenant, vous devez cliquer sur celui que vous souhaitez avoir et le téléchargement commencera.
Enfin, vous devez compiler et installer à partir des sources: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file
la source
make install
pourrait altérerdpkg
ouapt
.. pouvez-vous élaborer! @AlphaCentauriSi vous avez fait un standard
./configure; make
sans passer aucune option àconfigure
, alorsmake install
placerez les morceaux de votre version désirée de GCC dans divers sous-répertoires de/usr/local
.L'
/usr/local
arborescence de répertoires est destinée aux logiciels installés par l'administrateur système en dehors du système de gestion des packages (c'est-à-dire exactement ce que vous faites). En tant que tel, les logiciels installés là-bas ne casseront pas les logiciels fournis sauf dans des circonstances extrêmement inhabituelles.GCC en particulier est conçu autour de l'hypothèse que plusieurs versions seront installées. Cela nécessite à peu près des mesures actives de votre part pour casser quoi que ce soit (par exemple en mélangeant et en faisant correspondre des pièces pour essayer de créer une version hybride).
la source
configure
script (par exemple certaines,-program-suffix=
etc.)Tout d'abord, je recommanderais, si vous compilez GCC à partir de sa source, de choisir une version plus récente (par exemple GCC 7 fin 2017).
Ensuite, assurez-vous de construire GCC en dehors de son arborescence source et d'essayer d'abord son
configure
script avec--help
et de passer plus d'options à sonconfigure
. Lisez attentivement les instructions d' installation de GCC et comprenez le rôle de l' autoconf .En pratique, je recommande
exécuter
/usr/bin/gcc -v
pour comprendre comment le GCC de votre système a été configuréexécuter
apt-get build-dep gcc-6
(ou similaire) pour obtenir les dépendances GCC du système récentcréez un répertoire de construction en dehors de votre arborescence source GCC, et exécutez plus loin
.../configure
(remplacez...
par le chemin relatif approprié, par exemple../gcc-7.2/
) etmake
là.vous voudrez probablement passer au moins
--program-suffix=-mine
à celaconfigure
(le-mine
peut être remplacé par un autre suffixe) et vous pourriez même ajouter--prefix=$HOME/soft/
si vous n'avez pas accès root. Vous aurez probablement besoin d' options supplémentaires àconfigure
et vous devez choisir et leur donner soigneusement.puis plus tard
make install
(vous pouvez même exécuter sans être rootmake install DESTDIR=/tmp/gccinst/
et ensuite copier soigneusement et récursivement en tant que root qui/tmp/gccinst/
....) installerait des choses dans/usr/local/bin/gcc-mine
etc .... (ou$HOME/soft/bin/gcc-mine
....) donc ne cassera aucun fichier installé par le système .Notez que le FHS exige que le système de gestion des paquets laisse seul
/usr/local/
(ce qui est la valeur--prefix
par défaut pour GCCconfigure
)la source
Vous pouvez également utiliser une chaîne d'outils précompilée ou celle-ci pour votre architecture spécifique (x86_64, glibc, gcc 6.3).
Bien sûr, l'option suivante consiste à utiliser un soi-disant rootfs-builder comme buildroot ou yocto
pour générer une chaîne d'outils avec votre version spécifique de gcc.
la source