Supongo que tengo una biblioteca libfoo.so.1
, que depende (de acuerdo con ldd
) en libbar.so.1
. Sin embargo, libbar.so.1
no está disponible en este momento. Mi aplicación necesita llamar a una función en libfoo.so.1
que no requiere libbar.so.1
en absoluto.¿Cómo cargar una biblioteca compartida sin cargar sus dependencias?
¿Hay alguna manera de cargar libfoo.so.1
, resolver el símbolo de la función y llamarlo sin tener libbar.so.1
para satisfacer la dependencia? Es un caso de "Sé lo que estoy haciendo, solo déjame hacerlo ya". Intenté el indicador RTLD_LAZY, pero todavía intenta cargar la biblioteca libbar.so.1
antes de no cargando los símbolos.
EDITAR
Esta es la situación exacta.
tenemos 3 jugadores:
libbar.so.1
, una biblioteca compartida ubicada en un camino no enLD_LIBRARY_PATH
oldconfig
, y cuyas dependencias están todos resueltoslibfoo.so.1
, una biblioteca compartida situada en un directorio diferente alibbar
, pero que depende delibbar
. En tiempo de ejecución,libfoo
sabrá dónde ubicarlibbar
.App
, una aplicación binaria que necesita cargarlibfoo
en algún momento durante el tiempo de ejecución.
App
no sabe dónde encontrar libbar
, pero sabe que libfoo
sabe. Lo que estoy tratando de lograr es tener una función init en libfoo
que simplemente cambiaría el directorio de trabajo actual de App
donde se encuentra libbar
para finalmente resolver todas las dependencias y hacer felices a todos.
libfoo
se finalmente necesidad de llamar a las cosas en libbar
, pero no en esta función init. No creo que la creación de un apéndice funcione, ya que los símbolos eventualmente tendrían que resolverse a las funciones reales.
Es bueno que hayas mencionado RTLD_LAZY: muestra que has intentado y me impide seguir el camino del arenque rojo de sugerirlo. –