![¿Qué versión hace uso del sistema si hay varias versiones de una biblioteca?](https://rvso.com/image/134431/%C2%BFQu%C3%A9%20versi%C3%B3n%20hace%20uso%20del%20sistema%20si%20hay%20varias%20versiones%20de%20una%20biblioteca%3F.png)
Digamos que ya tenemos la biblioteca freetype instalada en /usr/lib64/libfreetype.so cuya versión es 1.4 y hay otra versión de esta biblioteca que hemos compilado e instalado en /usr/local/lib/libfreetype.so. ¿Cómo sabe el sistema de compilación (make) qué versión usar cuando compilamos un software que requiere freetype?
Respuesta1
Versión TL;DR: depende.
- SO: puede haber un
LD_LIBRARY_PATH
archivo de configuración o comando del entorno específico del SO ( ) (comoldconfig(8)
) que registra las rutas utilizadas para buscar bibliotecas. - sistema de construcción: puede haberVariables de entornocomo
LDFLAGS
indicadores de línea de comando o configuraciones de archivos de configuración;mutt
tiene--with-curses=[dir]
para cuando el sistema (o usuario) tiene ncurses en una ruta personalizada. Estos dependen del sistema de compilación (o incluso del tipo demake
) y es posible que sea necesario escribirlos manualmente en los archivos autoconf o cmake. - Configuración posterior a la compilación: herramientas como
patchelf
(si están disponibles) permiten seleccionar diferentes bibliotecas o modificar la ruta de búsqueda.
Respuesta2
libxxx.so
normalmente es un enlace simbólico al archivo de la biblioteca compartida que incluye la versión en el nombre.
Si vincula usando , entonces se usa -lxxx
este archivo.libxxx.so
Si desea vincular con otra versión, debe especificar el nombre de ruta completo de la biblioteca.