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 contrib
a mi
/etc/apt/sources.list
archivo 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 install
como me temo que va a manipular apt
y dpkg
posiblemente 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/gcc
y hacer un enlace simbólico desde /usr/bin/gcc
donde 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 -R
mismo 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 strace
a 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.
fuente
Respuestas:
GCC 6 está disponible en kali linux, se puede instalar como sigue:
Para cambiar entre gcc6 y gcc7
salida de muestra:
Selecciona tu
gcc
versión predeterminada .el 2017-08-05 la versión gcc-6 se actualiza de
6.3.0
a6.4.0
.Construyendo una versión específica de gcc
6.3.0
Descargue el tarball desde el espejo más cercano : lanzamientos de GCC
Añadir
gcc-6.3
aupdate-alternatives
Importante : La
--disable-multilib
opción es necesaria para configurar y construirgcc
para la arquitectura actual.GCC WIKI: Instalación de GCC
fuente
6.3.0
, ahora la versión gcc6 está actualizada a6.4.0
.Ahora debe hacer clic en el que desea tener y comenzará la descarga.
Finalmente, debe compilar e instalar desde la fuente: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file
fuente
make install
podría alterardpkg
oapt
... ¿puede dar más detalles? @AlphaCentauriSi hizo un estándar
./configure; make
sin pasar ninguna opción aconfigure
,make install
colocará 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).
fuente
configure
script (por ejemplo, algunas,-program-suffix=
etc.)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
configure
script con--help
y 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 -v
para comprender cómo se ha configurado el GCC de su sistemaejecutar
apt-get build-dep gcc-6
(o similar) para obtener las dependencias de GCC recientes del sistemacree 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/
) ymake
allí.probablemente quiera pasar al menos
--program-suffix=-mine
a esoconfigure
(-mine
puede ser reemplazado por otro sufijo) e incluso puede agregar--prefix=$HOME/soft/
si no tiene acceso de root. Usted probablemente querrá opciones adicionales aconfigure
y hay que elegir y darles cuidado.luego, más tarde
make install
(incluso podría ejecutarse sin ser rootmake install DESTDIR=/tmp/gccinst/
y luego copiar con cuidado y recursivamente como root que/tmp/gccinst/
...) instalaría cosas en/usr/local/bin/gcc-mine
etc ... (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--prefix
para los GCCconfigure
)fuente
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.
fuente