Si quiero vincular dinámicamente una biblioteca compartida (.so) para una aplicación C++ (que se creó con g++) usando LD_PRELOAD, ¿importa si el .so se genera desde un archivo fuente C (usando gcc) o un archivo fuente C++? (usando g++)? ¿Y porqué o porqué no?
Gracias por ayudarme a entender esto.
Sí, un ejecutable de C++ se puede vincular (tanto estática como dinámicamente) a una biblioteca de C.
Esto es completamente deliberado. Las ABI de C++ están diseñadas para ser compatibles con versiones anteriores.
Deberá asegurarse de que las declaraciones de funciones, etc., de los símbolos de la biblioteca, tal como están escritos en su programa C++, estén marcados como extern "C" para indicar que está cruzando un límite de idioma. Por lo general, los propios archivos de encabezado enviados por la biblioteca harán esto por usted.
No importa cómo se generó un .so. Debería poder precargar un .so que también se generó a partir del código FORTRAN. La cuestión clave es asegurarse de usar correctamente los símbolos en el .so.
Cuando se genera un .so a partir del código C, los nombres de los símbolos se desentrañan.
Cuando se genera un .so a partir del código C++, los nombres de los símbolos se alteran.
No estoy seguro de si los nombres de los símbolos en un .así generado desde FORTRAN están alterados.