¿Cómo cargar una biblioteca compartida sin cargar sus dependencias?
Di que tengo una bibliotecalibfoo.so.1
, que depende (segúnldd
) enlibbar.so.1
. Sin embargo,libbar.so.1
no está disponible en este momento. Mi aplicación necesita llamar a una función enlibfoo.so.1
que no requierelibbar.so.1
en absoluto.
¿Hay una manera de cargarlibfoo.so.1
, resuelve el símbolo de función y luego llámalo sin tenerlibbar.so.1
¿Para satisfacer la dependencia? Es un caso de "Sé lo que estoy haciendo, solo déjame hacerlo ya". Probé el indicador RTLD_LAZY, pero todavía intenta cargar ellibbar.so.1
biblioteca antesno cargando los simbolos.
EDITAR
Aquí está la situación exacta.
Tenemos 3 jugadores:
libbar.so.1
, una biblioteca compartida ubicada en un camino que no está enLD_LIBRARY_PATH
oldconfig
, y cuyas dependencias estan todas resueltas.libfoo.so.1
, una biblioteca compartida ubicada en un directorio diferente al delibbar
, 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 encontrarlibbar
, pero sabe quelibfoo
sabe Lo que estoy tratando de lograr es tener una función init enlibfoo
que simplemente cambiaríaApp
Directorio de trabajo actual a dondelibbar
Está ubicado para resolver finalmente todas las dependencias y hacer felices a todos.
libfoo
seráfinalmente Necesito llamar cosaslibbar
, simplemente no en esta función de inicio. No creo que crear un talón funcionaría ya que los símbolos necesitarían resolverse para elreal funciones