Estoy intentando crear una biblioteca de objetos compartidos que abrirá un programa usando dlopen(). Esta biblioteca usará la funcionalidad provista por una biblioteca separada que es estática.Cómo forzar a los símbolos de una biblioteca estática a ser incluidos en una compilación de biblioteca compartida?
He incluido el indicador apropiado en la línea del enlace para obtener la biblioteca estática al vincular la dinámica (por ejemplo, tengo -lfoo para libfoo.a), y el enlazador no se queja. Sin embargo, cuando el programa principal llama a dlopen() en la biblioteca dinámica, la llamada falla con un mensaje de "símbolo indefinido" que hace referencia a un símbolo de la biblioteca estática.
Ejecutar nm indica que el símbolo en cuestión no está definido en la biblioteca dinámica, y el programa principal no lo contiene, entonces, ¿cómo puedo forzar al enlazador a que tire de este símbolo? El símbolo en sí está en la sección de datos no inicializados (tipo de símbolo "B" en la salida nm).
La respuesta '--whole-archive' convertirá todos los símbolos del archivo en símbolos exportados en la biblioteca compartida. Si solo necesita un símbolo, esta respuesta crea mucho menos hinchazón en su .so. – MuertoExcobito