Cómo instalar GCC 5 en debian jessie 8.1

21

Intenté muchas soluciones para instalar la actualización de mi compilador gcc en el servidor Debian. Ninguno de ellos funcionó. Necesito la actualización del compilador para usar las nuevas funciones de c ++ 11, ya que esto proporciona una ABI libcxx11 estable y un soporte estable para C ++ 11 (consulte aquí ). Específicamente obteniendo la versión 'GLIBCXX_3.4.21' que no está incluida en mi compilador actual gcc versión 4.9.2 (Debian 4.9.2-10).

Algunos consejos para la solución serán útiles. Gracias por adelantado.

Algunos enlaces al foro relacionados con mi problema que ya probé:

1 2 3 (la solución no completamente relacionada es para ubuntu, pero todavía no pude encontrar gcc-5 en el servidor ftp de debian)

mluthra
fuente
Eso se proporciona en Debian / testing y, como puede ver, implica cambios en las bibliotecas de tiempo de ejecución. Alguien podría aconsejarle cómo hacer esto como un paquete Debian, pero el efecto sería un poco diferente de cambiar a la configuración de prueba debido a la gran cantidad de paquetes afectados.
Thomas Dickey
¿Por qué necesita específicamente el nuevo soporte ABI ? Puede compilar la mayoría del código C ++ 11 con gcc 4.9.2 de Debian 8, solo tendrá que volver a compilarlo cuando se publique Debian 9. Si no puede esperar, la solución más fácil sería cambiar testing, pero probablemente no sea una buena idea en un servidor (dependiendo de lo que quiera decir con servidor, por supuesto). El cambio de gcc 4.9 a gcc 5 implicó una transición de biblioteca, por lo que te espera un mundo de dolor si intentas hacerlo tú mismo.
Stephen Kitt
Estoy de acuerdo con lo que dicen Thomas y Stephen, excepto que estoy mucho menos preocupado por la idea de usar las pruebas en un servidor. No todos los servidores requieren la igualdad a largo plazo de binarios y bibliotecas (que es lo que significa "estable" en el contexto de Debian), para algunos servidores, las pruebas de seguimiento o incluso inestables son más útiles (si, por ejemplo, se necesitan características innovadoras, o simplemente para mantenerse por delante del guión kiddies). Sin embargo, ejecutar pruebas / inestabilidad en servidores de producción requiere absolutamente mucha habilidad y conocimiento sobre Debian para solucionar la falla ocasional. Pruebe las actualizaciones en otras máquinas o máquinas virtuales primero.
cas
@cas No estaba pensando en la estabilidad de los archivos binarios, sino en las dos desventajas principales de testing(usado solo): los paquetes a veces se eliminan temporalmente (por lo que la configuración que acaba de validar en su máquina virtual de prueba ya no está disponible fácilmente) , y las correcciones de seguridad pueden retrasarse (a veces por un tiempo prolongado si testingestá experimentando una gran transición de biblioteca, aunque sí lo es testing-securitypara tales casos).
Stephen Kitt
1
Si recompila su programa en el sistema Debian (en lugar de copiarlo) debería funcionar bien.
Stephen Kitt

Respuestas:

13

Necesitaba instalar GCC 5+ en Debian Jessie y, como está disponible para las pruebas de Debian (al menos el 16 de junio), puede usar apt-pinning para instalar los paquetes disponibles allí (consulte https://wiki.debian.org/AptPreferences ) .

Para instalar GCC 5+ de las pruebas en Debian Jessica usando apt-pinning:

  1. Agregue el repositorio de prueba de Debian a sus fuentes apt creando un archivo en el directorio que /etc/apt/sources.list.dcontiene la línea

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. Indique a Debian que use fuentes de prueba en ciertos paquetes creando un archivo que /etc/apt/preferences.dcontenga lo siguiente:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Actualizar la base de datos de apt: sudo apt-get update

  4. Instale gcc de la prueba: sudo apt-get install -t testing gcc

    Tenga en cuenta que al usar -t testingle dice a apt-get que instale gcc desde las fuentes de prueba como se configuró anteriormente.

Le sugiero que limpie cualquier compilación y vuelva a compilar cualquier dependencia antes de volver a compilar sus fuentes.

¡Que te diviertas!

llekn
fuente
1
Nunca he intentado esto (ni deseo probarlo), pero su procedimiento es interesante. No muchas suites de software están tan estrechamente ligadas y entrelazadas a todo el sistema Debian como GCC. ¿Su procedimiento realmente funciona? ¿O causa más problemas de los que resuelve? Curioso.
thb
1
De hecho, lo intenté con buenos resultados: pude compilar con éxito lo que estaba construyendo y el sistema continuó funcionando sin problemas. Sin embargo, podría tener razón: cambiar la versión de GCC podría romper la compilación de otros paquetes (es decir, compilar fuentes al instalar paquetes con pip) , pero creo que este procedimiento es el menos invasivo porque aptharía un seguimiento de qué paquetes dependen de GCC e instalará versiones compatibles según sea necesario (hasta donde puedo recordar).
llekn
2
Nota para el paso 2: el archivo en /etc/apt/preferences.d/ no debe contener un punto "." en el nombre del archivo o finalice en ".pref". De lo contrario, este archivo se ignora. Se agradecería una explicación del significado del valor 100 y por qué se eligió.
Ludwig Schulze
Según tengo entendido, cuanto más se Pin-Priorityobtiene un paquete, más preferencia tendrá sobre otros paquetes con un número menor. Entonces, como en los estados de la página AptPrefences de Debian , testingde manera predeterminada, Pin-Priority: 900todos los paquetes testingse instalan de manera predeterminada. Por lo tanto, se especifica que testingtendrá una Pin-Priority: 100disminuye testinglos paquetes con prioridad por lo que sólo se instalable si se solicita cuando se especifica el objetivo enapt-get install -t testing ...
llekn
1
@ LeeK-B De hecho, el uso de Package: gccactualizaciones de todo el sistema a las pruebas. La documentación sobre apt-prefenceses confusa, así que supongo que esto es lo que está sucediendo: 1: como los paquetes de prueba tienen versiones mayores, por defecto tienen prioridad sobre los estándar 2: Especificar paquete: gcccon Pin-priority: 100todos los paquetes de prueba tienen prioridad predeterminada (superior a estándar) excepto gcc. Exactamente lo contrario de lo que queríamos.
Actualicé
6

Para combinar las 2 respuestas anteriores en una que funcione:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

¡¡¡PERO!!! Use esto bajo su propio riesgo ya que está instalando paquetes inestables. Es posible que también desee eliminar/etc/apt/sources.list.d/unstable.list una vez que haya instalado los paquetes.

Si es posible, instálelo en Docker para no estropear su sistema operativo. Su experiencia puede ser diferente.

johndodo
fuente
4

A partir de 2017-02-19, gcc-5 se ha eliminado de las pruebas:

https://tracker.debian.org/pkg/gcc-5

Puede hacerlo apt-get install gcc-5si primero ejecuta esta línea como root:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

Entonces, es probable que desee cambiar la prioridad de esa fuente /etc/apt/preferences.dsegún la respuesta de llekn.

nachoparker
fuente
1

Estaba teniendo problemas la semana pasada; parece que a partir del 2019-01-23 gcc-5 se ha eliminado por completo de los repositorios. (Ver https://tracker.debian.org/pkg/gcc-5 )

Si realmente lo necesita, supongo que podría compilarlo desde la fuente. Voy a encontrar una manera de eliminar la dependencia de mi sistema.

JDong
fuente