web-dev-qa-db-fra.com

Comment installer une version spécifique de GCC dans Kali Linux?

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.

8
AlphaCentauri

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.

GCC WIKI: Installation de GCC

10
GAD3R
  1. Vous devez d'abord aller sur ce site: http://gcc.gnu.org/mirrors.html
  2. Sélectionnez ensuite les anciennes versions et vous verrez différentes versions.
  3. Maintenant, vous devez cliquer sur celui que vous souhaitez avoir et le téléchargement commencera.

  4. 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 =

1
Prashant Luhar

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).

0
Mark

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)

0

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.

0
Christian Stenzel