Estoy escribiendo un código que usa bibliotecas dinámicas compartidas como complementos.Recibo un error de "símbolo no definido" al cargar la biblioteca con dlopen
Mi línea de comandos para la construcción de las bibliotecas compartidas se parece a:
cc -shared -fPIC -o module.so -g -Wall module.c
Dentro del módulo, puedo llamar a las funciones que se encuentran en cualquier otra biblioteca compartida que se ha cargado en el ejecutable principal.
Sin embargo, no puedo acceder a las funciones (que se exportan) que se encuentran en el archivo ejecutable (obtengo errores de undefined symbol
).
Mi llamado a dlopen
se parece a esto:
void *handle = dlopen(plugin, RTLD_NOW);
Puede alguien aconsejar por favor cómo mi módulo puede llamar de nuevo a mi ejecutable, sin tener que poner todas las funciones de utilidad de los ejecutables en otra biblioteca compartida?
Esta solución también se aplica cuando se utilizan las extensiones de Boost, ya que la clase de boost shared_library está utilizando dlopen (en Linux) para cargar la biblioteca. –