GLIBCXX 3.4.15 en Centos 6


8

Necesito instalar GLIBCXX 3.4.15 en mi versión de Centos 6 (para ejecutar un servidor para un juego en Steam). Busqué en Google y tuve varios sitios web donde instalaron programas donde apareció el error donde decía que se necesitaba 3.4.15 ( LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found), pero simplemente usaron una forma de evitarlo / no instalarlo. Cuando lo hice strings /usr/lib/libstdc++.so.6 | grep GLIBCXX, esta fue la salida:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

Entonces, ¿cómo instalaría GLIBCXX 3.4.15 directamente en Centos 6?

Respuestas:


7

Consideraría esto como un truco, pero lo he usado en más ocasiones de las que me gustaría admitir para evitar problemas de compatibilidad con GLIBC, como el que estás encontrando.

El hack consiste en hacer un enlace en el /usr/libque se incluye el nombre de la biblioteca que desea una herramienta en particular. El enlace luego apunta al nombre alternativo de la biblioteca.

Ejemplo

Digamos que quería crear un enlace a libstdc++.so.6.

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Resulta ser algo como esto:

$ ln -s libstdc++.so.6 libstdc++.so.6.0.15

Comprobación de los resultados:

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6.0.15 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Pero no estoy seguro de este método funcionará ya que eres la biblioteca aún no podrá contar con la cadena de versión, GLIBCXX_3.4.15.

Si el truco no tiene éxito, es probable que tenga que morder la bala e instalar GLIBC en un directorio alternativo, y luego anular LD_LIBRARY_PATHo LD_PRELOADpara que la ejecución de solo steam vea la biblioteca modificada.

Ejemplo

$ LD_PRELOAD='mylibc.so anotherlib.so' program

Los detalles sobre cómo hacer esto se cubren un poco más aquí en este SO Q&A: Múltiples bibliotecas glibc en un solo host .


@PMint: ¿qué método funcionó para usted?
slm

¿No debería ser la segunda ls, tercera línea libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium

@Sukminder: sí, gracias por la captura. Fijo.
slm

2

Básicamente, la versión del paquete libstdc ++ RPM enviado por CentOS (4.4.7) no es lo suficientemente reciente para su aplicación. CentOS ofrece estabilidad a largo plazo en lugar de las últimas y mejores versiones, por lo que no es completamente inesperado.

Fedora normalmente está bastante adelantado y puede ejecutar su servidor sin ningún problema.

Alternativamente, podría construir una versión más nueva de libstdc ++ a partir de una fuente más actual. Comenzaría con el archivo CentOS SPEC en el gcc SRPM, la última versión de gcc.gnu.org y volvería a trabajar para crear mis propios RPM.

Sin embargo, las actualizaciones de las bibliotecas C eran en el pasado una buena forma de romper un sistema de maneras inesperadas ...


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.