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:
https://askubuntu.com/questions/138284/how-to-downgrade-a-package-via-apt-gethttps://askubuntu.com/questions/428772/ comment-installer-version-spécifique-d'un-paquet/428778https://askubuntu.com/questions/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 package, par ex. gcc, peut être déterminé avec:
apt-cache showpkg gcc
Qui listera les versions disponibles sous "versions:", par ex.
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 remplaçant 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écutez 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 ceux trouvés ici: http://snapshot.debian.org/ et à diverses autres questions et sites Web 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 à propos de l'exécution make install
comme je le crains, il va altérer apt
et dpkg
et éventuellement casser 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 créez un lien symbolique à partir de /usr/bin/gcc
à 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 également essayé de tout copier avec 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 à faire strace
pour 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 un solution mal conçue. Mais ce serait bien si quelqu'un pouvait me dire comment faire cela de manière saine.
Comment installer une version spécifique de GCC dans Kali Linux?
GCC 6 est disponible sur kali linux, il peut être installé comme suit:
apt install g++-6 gcc-6
Pour basculer entre gcc6 et gcc7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1 --slave /usr/bin/g++ g++ /usr/bin/g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 2 --slave /usr/bin/g++ g++ /usr/bin/g++-6
update-alternatives --config gcc
exemple de sortie:
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-6 2 auto mode
1 /usr/bin/gcc-6 2 manual mode
2 /usr/bin/gcc-7 1 manual mode
Press <enter> to keep the current choice[*], or type selection number:
Sélectionnez votre version gcc
par défaut.
le 2017-08-05, la version gcc-6 est mise à niveau de 6.3.0
à 6.4.0
.
Installation de
xmrig
en suivant les instructions build's .
apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake ..
make
Construction d'une version spécifique de gcc 6.3.0
Téléchargez l'archive tar du plus proche miroir : GCC Releases
wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
tar xvf gcc-6.3.0.tar.gz
cd gcc-6.3.0
apt build-dep gcc
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-6.3.0/configure --prefix=/usr/bin/gcc-6.3 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 8
make install
Ajoutez gcc-6.3
À update-alternatives
Important : L'option --disable-multilib
Est requise pour configurer et construire gcc
pour l'architecture actuelle.
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: https://askubuntu.com/questions/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file =
Si vous avez fait un ./configure; make
sans passer d'options à configure
, puis make install
placera les morceaux de votre version souhaitée de GCC dans divers sous-répertoires de /usr/local
.
Le /usr/local
l'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).
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,
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).
Assurez-vous ensuite de créer GCC à l'extérieur de son arborescence source et d'essayer d'abord son script configure
avec --help
et à passer plus d'options à son configure
. Lisez attentivement les instructions installation de GCC et comprenez le rôle de autoconf .
En pratique, je recommande
courir /usr/bin/gcc -v
pour comprendre comment le GCC de votre système a été configuré
courir apt-get build-dep gcc-6
(ou similaire) pour obtenir les dépendances GCC du système récent
créez un répertoire de construction en dehors de votre arborescence source GCC et exécutez davantage .../configure
(remplacer ...
par un chemin relatif approprié, par exemple ../gcc-7.2/
) et make
là-bas.
vous voulez probablement passer au moins --program-suffix=-mine
à ce configure
(le -mine
peut être remplacé par un autre suffixe) et vous pourriez même ajouter --prefix=$HOME/soft/
si vous ne disposez pas d'un accès root. Vous voudrez probablement des options supplémentaires à configure
et vous devez les choisir et les donner avec soin.
puis un plus tard make install
(vous pouvez même exécuter sans être root make install DESTDIR=/tmp/gccinst/
et plus tard, copiez soigneusement et récursivement en tant que root /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 nécessite que le système de gestion de paquets laisse seul /usr/local/
(qui est la valeur par défaut --prefix
pour GCC configure
)
Vous pouvez également utiliser un toolchain précompilé ou celui-ci pour votre spécifique architecture (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.