Ejecutando la biblioteca C++ 11 con libc anterior

Ejecutando la biblioteca C++ 11 con libc anterior

Escribí una biblioteca compartida usando funciones de C++ 11, compilada con gcc 4.8, libc 2.18, que debe ejecutarse en la máquina CentOS 6 de un cliente, que tiene gcc 4.4.7, libc 2.12. Hay algunos símbolos en esta biblioteca que no se encuentran en libc 2.12, entonces, ¿cómo puedo usar esta biblioteca en CentOS 6? Tengo flexibilidad en cuanto a cómo, dónde y en qué máquina se puede compilar la biblioteca, pero eventualmente debería poder usarse en el cliente. CentOS 6, donde los paquetes no se pueden tocar. ¿Está bien compilarlo con DevTools-2 en CentOS 6 o puede haber problemas relacionados con ABI? Por favor, avíseme si hay alguna otra sugerencia. Gracias de antemano.

Respuesta1

Compile en el mismo sistema que el que lo ejecuta. Es posible que necesites volver a compilar para un salto de versión de la distribución (por ejemplo, 7 a 8) y, a veces, entre ellas.

Si utiliza diferentes versiones del compilador,podríase encuentra con incompatibilidades entre las bibliotecas auxiliares compartidas para el compilador, las bibliotecas base C o C++ (muy probablemente), o una variedad de dependencias externas. No es un desastre que me gustaría tener que depurar.

Respuesta2


Funciones de C++ 11, compiladas con gcc 4.8

? ¿Por qué no g++ 4.8?

Sugerencia: Compile su biblioteca estáticamente con libstdc++.a → Creo que las funciones de C++ 11 están en *libstdc++-devel, no en glibc.

El devtoolset-2-libstdc++-devel-4.8.2 viene con bibliotecas estáticas:

/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }


información relacionada