linux - library - cómo enlazar a lib compartido desde lib compartido con ruta relativa
c dynamic linking (3)
Es incorrecto usar una ruta relativa por razones de seguridad,
Deberías usar las funciones libdl (dlopen, etc.)
Estoy trabajando en un complemento de Firefox que utiliza bibliotecas externas para representar gráficos en 3D en el navegador.
El problema es que quiero que el complemento use bibliotecas externas empaquetadas con él sin cambiar la variable LD_LIBRARY_PATH
.
Las bibliotecas se instalan en una posición relativa al complemento (una biblioteca compartida también), mientras que el ejecutable real (es decir, el navegador) se puede ubicar en algún otro lugar.
Algunas cosas que debes saber. Lo estoy probando en Ubuntu (no hay problema en la versión de Windows del complemento) Mis dependencias son las bibliotecas OpenSceneGraph y la compilación estática hará que el complemento sea realmente grande (no es una opción si hay otra)
espero que me pueda ayudar
Atentamente.
Tal vez podría usar la -L
durante la compilación para especificar la ruta relativa donde el enlazador puede encontrar sus objetos compartidos.
Si ya ha generado su lib, puede vincular invocando directamente el comando ld
.
Sugerencias: Puede verificar fácilmente si algunos símbolos están definidos en una biblioteca usando el comando nm
unix. Esta es una forma útil de verificar que el enlace esté bien hecho.
(Si yo fuera tú, solo cambiaría temporalmente el LD_LIBRARY_PATH
como dijiste en tu publicación. ¿Por qué no quieres hacer esto?)
Use la opción rpath al vincular y especifique la ruta ''especial'' $ ORIGIN .
Ejemplo:
-Wl,-R,''$ORIGIN/../lib''
Aquí hay un sitio que explica el uso de $ ORIGEN : http://www.itee.uq.edu.au/~daniel/using_origin/