¿Cómo instalar una versión específica de GCC en Kali Linux?

8

Esta pregunta parece abordarse correctamente en varias preguntas y en otros lugares que se encuentran fácilmente con Google, pero no encuentro la solución satisfactoria por las razones que se explican a continuación. Pero solo para completar, he incluido algunos enlaces relevantes:

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

Y otros.

Sin embargo, esta pregunta se refiere a la instalación de una versión muy específica de GCC en Kali Linux, que no aparece fácilmente como un paquete específico. En particular, la pregunta se refiere a cómo instalar la versión 6.3.0, ya que necesito esta versión para compilar un programa en particular: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/

(como una pregunta adicional, si hay una forma más sensata de solucionar este problema en particular sin usar una versión diferente de GCC, no dude en responder, pero creo que esta pregunta es general y me gustaría saber cómo hacerlo independientemente de cómo hacer que el programa mencionado enlace correctamente)

Las versiones que están disponibles para instalar cualquier paquete, por ejemplo, gcc, se pueden determinar con:

apt-cache showpkg gcc

Que enumerará las versiones disponibles en "versiones:", por ejemplo

4:7.2.0-1d1
4:4.9.2-2

La instalación es tan simple como emitir

apt-get install gcc:4:4.9.2-2

Esto instalará la versión anterior 4: 4.9.2-2, simplemente (creo) sobrescribiendo la instalación 7.2.0-1d1, si está presente.

Para obtener la versión 4: 4.9.2-2 disponible, tuve que agregar deb http://old.kali.org/kali sana main non-free contriba mi /etc/apt/sources.listarchivo y luego ejecutar apt-get update.

Sin embargo, ¿qué sucede si la versión que necesito no aparece en la lista?

He estado experimentando con varias fuentes, por ejemplo, las que se encuentran aquí: http://snapshot.debian.org/ y en varias otras preguntas y sitios web de búsquedas de Google.

La mayoría de ellos me dan ignorar o errores, por ejemplo, de la siguiente manera

Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease

Incluso si esto funcionara, parece ser un enfoque muy malo instalar una versión en particular, ya que agregar alguna fuente arbitraria podría no tener la versión en particular que quiero.

Si busco gcc en snapshot.debian.org, solo obtengo versiones muy antiguas: http://snapshot.debian.org/package/gcc/

Finalmente me sentí frustrado con este enfoque y compilé GCC 6.3.0 a partir del tarball fuente. La compilación fue exitosa, pero luego me enfrento a cómo instalarla. Estoy cauteloso acerca de la ejecución make installcomo me temo que va a manipular apty dpkgposiblemente romper el sistema.

En cambio, intenté ejecutarlo desde el directorio de compilación, directamente. Intenté simplemente agregar el directorio de compilación como la primera entrada en mi RUTA, que no funcionó. Luego, intenté cambiar el nombre /usr/bin/gccy hacer un enlace simbólico desde /usr/bin/gccdonde vive mi ejecutable gcc-6.3.0. Esto presenta el siguiente problema:

cc: error trying to exec 'cc1': execvp: No such file or directory, which

Esto se solucionó con otra entrada en mi RUTA.

Entonces, me sale este error:

/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory

Lo que supongo es porque falta una entrada /usr/lib/gcc/x86_64-linux-gnu. Traté de hacer un enlace simbólico de 6 a 6.3.0, pero esto no fue suficiente. También intenté copiar todo con el cp -Rmismo resultado.

Este debería ser un programa de 64 bits, pero también consideré lo mismo para /usr/lib/gcc/i686-linux-gnu.

Estoy seguro de que podría comenzar stracea ver desde dónde intenta abrir los archivos, leer los archivos de registro, leer la fuente y, finalmente, me imagino que sería capaz de descubrir cómo hackear una solución mal concebida. Pero sería bueno que alguien me dijera cómo hacer esto de una manera sensata.

AlphaCentauri
fuente
Esto no resta valor a los méritos generales de su pregunta; pero las versiones actuales de XMRig deberían funcionar bien con GCC 7, por lo que debería ser capaz de construirlo sin perder el tiempo con GCC 6.3.
Stephen Kitt
Siempre puede compilar GCC (cualquier versión no muy antigua) a partir de su código fuente , ya que es software libre. Tenga cuidado al configurarlo y compílelo fuera de su árbol de origen.
Basile Starynkevitch

Respuestas:

10

¿Cómo instalar una versión específica de GCC en Kali Linux?

GCC 6 está disponible en kali linux, se puede instalar como sigue:

apt install g++-6 gcc-6

Para cambiar entre gcc6 y 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

salida de muestra:

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:

Selecciona tu gccversión predeterminada .

el 2017-08-05 la versión gcc-6 se actualiza de 6.3.0a 6.4.0.

Instalación xmrigsiguiendo las instrucciones de la compilación .

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

Construyendo una versión específica de gcc 6.3.0

Descargue el tarball desde el espejo más cercano : lanzamientos de GCC

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

Añadir gcc-6.3aupdate-alternatives

Importante : La --disable-multilibopción es necesaria para configurar y construir gccpara la arquitectura actual.

GCC WIKI: Instalación de GCC

GAD3R
fuente
1
Perdóname, pero ¿no instala esto cualquier versión de GCC que proporcione "gcc-6"? ¿Qué pasa si quiero instalar específicamente 6.3.0?
AlphaCentauri
@AlphaCentauri Hace 6 meses la versión gcc6 disponible es 6.3.0, ahora la versión gcc6 está actualizada a 6.4.0.
GAD3R
1
Respuesta de @AlphaCentauri actualizada, incluidos los pasos de construcción.
GAD3R
1
  1. Primero tienes que ir a este sitio web: http://gcc.gnu.org/mirrors.html
  2. Luego seleccione versiones anteriores y verá diferentes versiones.
  3. Ahora debe hacer clic en el que desea tener y comenzará la descarga.

  4. Finalmente, debe compilar e instalar desde la fuente: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file

Prashant Luhar
fuente
1
Gracias, pero no creo que hayas leído toda mi pregunta. Señalé cómo intenté compilar desde la fuente. El problema con esto (como señalé en mi pregunta) es que hacer "make install" en GCC podría no ser una buena idea, ya que posiblemente podría dañar el sistema. Además, simplemente ejecutar GCC sin hacer make install presenta sus propios desafíos, que también describí en mi pregunta original.
AlphaCentauri
Usted ha declarado en su pregunta que make installpodría alterar dpkgo apt... ¿puede dar más detalles? @AlphaCentauri
Prashant Luhar
0

Si hizo un estándar ./configure; makesin pasar ninguna opción a configure, make installcolocará las piezas de su versión deseada de GCC en varios subdirectorios de /usr/local.

El /usr/localárbol de directorios está diseñado para el software instalado por el administrador del sistema fuera del sistema de administración de paquetes (es decir, exactamente lo que está haciendo). Como tal, el software instalado allí no romperá el software empaquetado, excepto en circunstancias extremadamente inusuales.

GCC en particular está diseñado en el supuesto de que tendrá varias versiones instaladas. Casi requiere medidas activas de su parte para romper cualquier cosa (por ejemplo, mezclando y combinando piezas para intentar crear una versión híbrida).

marca
fuente
No debe (y probablemente no tendrá éxito) construir GCC en su árbol de origen. Y probablemente desee opciones adicionales para su configurescript (por ejemplo, algunas, -program-suffix=etc.)
Basile Starynkevitch
0

Finalmente me sentí frustrado con este enfoque y compilé GCC 6.3.0 a partir del tarball fuente. La compilación fue exitosa,

Primero, recomendaría, si compila GCC desde su fuente, elegir una versión más reciente (por ejemplo, GCC 7 a finales de 2017).

Luego, asegúrese de construir GCC fuera de su árbol de origen y probar primero su configurescript con --helpy pasarle más opcionesconfigure . Lea atentamente las instrucciones de instalación de GCC y comprenda la función de autoconf .

En la práctica, recomiendo

  • ejecutar /usr/bin/gcc -vpara comprender cómo se ha configurado el GCC de su sistema

  • ejecutar apt-get build-dep gcc-6(o similar) para obtener las dependencias de GCC recientes del sistema

  • cree un directorio de compilación fuera de su árbol fuente de GCC, y ejecute más .../configure(reemplace ...por la ruta relativa apropiada, por ejemplo ../gcc-7.2/) y makeallí.

  • probablemente quiera pasar al menos --program-suffix=-minea eso configure( -minepuede ser reemplazado por otro sufijo) e incluso puede agregar --prefix=$HOME/soft/si no tiene acceso de root. Usted probablemente querrá opciones adicionales a configurey hay que elegir y darles cuidado.

  • luego, más tarde make install(incluso podría ejecutarse sin ser root make install DESTDIR=/tmp/gccinst/y luego copiar con cuidado y recursivamente como root que /tmp/gccinst/...) instalaría cosas en /usr/local/bin/gcc-mineetc ... (o $HOME/soft/bin/gcc-mine...) para no romper ningún archivo instalado en el sistema .

Tenga en cuenta que el FHS requiere que el sistema de gestión de paquetes lo deje solo /usr/local/(que es el valor predeterminado --prefixpara los GCC configure)

Basile Starynkevitch
fuente
El OP ya tiene GCC 7, pero estaba buscando 6.3.0 después de un comentario equivocado de reddit.
Stephen Kitt
0

También puede usar una cadena de herramientas precompilada o esta para su arquitectura específica (x86_64, glibc, gcc 6.3).

Por supuesto, la siguiente opción es usar un llamado rootfs-builder como buildroot o yocto
para generar una cadena de herramientas con su versión específica de gcc.

Christian Stenzel
fuente