Estoy trabajando en redhat 5.2 en un proyecto que abarca varias organizaciones diferentes. Cada organización ofrece bibliotecas que se han compilado con varias versiones de g ++. Actualmente, estas versiones incluyen 4.1.1, 4.1.2 y 4.3.1. Estoy tratando de vincular todas las bibliotecas en un ejecutable utilizando 4.1.2. ¿Qué problemas puedo esperar al hacer esto? Como un aparte, ¿hay alguna manera de decir a qué ABI se construye cada versión del compilador?Mezclar bibliotecas de diferentes compiladores de C++
Respuesta
Tal vez es más fácil de enlace estático el ejecutable ... hace un gran binario, pero se ejecuta en todas las plataformas.
Este documento de política ABI detalla la compatibilidad entre las diferentes versiones de ABI. Según eso, la biblioteca libstdc++.so
debería ser compatible, y la última vez que gcc rompió la compatibilidad binaria estaba en 3.4. Deberías estar bien.
No debería haber problemas para vincular bibliotecas creadas a partir de versiones diferentes de g ++ a menos que se hayan enumerado en el sitio web g ++. Sin embargo, lo importante es que estas bibliotecas se construyan en la misma plataforma que en su caso es redhat 5.2. Una biblioteca creada para una plataforma que no sea linux/redhat (digamos Solaris) no se vinculará con su exe.
IIRC, hay una biblioteca de compatibilidad C++ que se utiliza para hacer precisamente eso. Creo que se llama libstdC++ - compat.
No puede vincular objetos que dependen de diferentes versiones de stdlibC++. – ephemient
GCC (Colección compilador GNU) define los números de versión y la compatibilidad.
Las bibliotecas G ++ entre 4.1.1 y 4.1.2 deben ser compatibles; enlace con el más nuevo.
Las librerías G ++ entre 4.1.x y 4.2.x no son compatibles; necesitas recompilar algo
Las librerías G ++ entre 3.x.y y 4.p.q no son compatibles; necesitas recompilar algo
En su escenario, el código creado con 4.3.1 no es compatible con el resto.
O tendrá que reconstruir el código actualmente compilado con 4.3.x, por lo que usa 4.1.x, o necesita recompilar el código actualmente compilado con 4.1.x, por lo que usa 4.3.x en su lugar.
Esa es la teoría, pero en la práctica el último cambio de ABI fue 3.4 –
@Edu: pero en cualquier momento en el futuro, podría haber un cambio que invoca esa regla, y las personas que se han vuelto descuidadas pueden estar en una sorpresa (tener que recompilar). –
- 1. Mezclar diferentes versiones de bibliotecas Java
- 2. Evite mezclar bibliotecas de depuración y liberación
- 3. Tamaño de las enumeraciones en bytes de compiladores diferentes
- 4. atributos de función pure/const en compiladores diferentes
- 5. la comprensión de la necesidad de compiladores para diferentes plataformas
- 6. Cómo indicar a Makefile que use compiladores diferentes
- 7. Instalación de compiladores C/C++ en Android
- 8. ¿Son incompatibles las implementaciones de herencia virtual C++ de los compiladores diferentes?
- 9. Bibliotecas de alta calidad para C++
- 10. ¿Cómo aplicar diferentes opciones de compilación para diferentes compiladores en cmake?
- 11. ¿Dónde puedo encontrar documentación sobre la alineación de memoria C++ en diferentes plataformas/compiladores?
- 12. compiladores de C++ y back/front ends
- 13. ¿Qué compiladores de C++ ya soportan lambda?
- 14. ¿Advertencias que se dispararán consistentemente en diferentes compiladores?
- 15. C# SerialPort: problemas para mezclar puertos con diferentes velocidades de baudios
- 16. ¿Por qué hay cuatro compiladores mono C#?
- 17. ¿Hay compiladores optimizados de C++ para el uso de plantillas?
- 18. compiladores dan diferentes respuestas para Proyecto Euler # 22
- 19. ¿Cómo manejan los compiladores C/C++ el tipo de conversión entre tipos con rangos de valores diferentes?
- 20. Unix compiladores de C++ que no entienden -o -C
- 21. Comprender los compiladores de C++ desde una perspectiva Java/C#
- 22. Cargando múltiples bibliotecas compartidas con diferentes versiones
- 23. C++ Impresiones de bibliotecas de origen de Adobe?
- 24. incoherencia de rasgos lambda en compiladores C++ 0x
- 25. Crear bibliotecas estáticas y compartidas de C++
- 26. ¿Las bibliotecas de C++ creadas con diferentes versiones de Visual Studio son compatibles entre sí?
- 27. ¿Usar bibliotecas de impulso C++?
- 28. Mezclar archivos Objective C, (*. M, * .mm & .c /.cpp)
- 29. Compatibilidad Dll entre compiladores
- 30. Compiladores para scripts de shell
Al principio pensé que te referías a Red Hat 5.2 (Apollo), que tiene más de diez años. :) – bk1e