¿Qué versión hace uso del sistema si hay varias versiones de una biblioteca?

¿Qué versión hace uso del sistema si hay varias versiones de una biblioteca?

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_PATHarchivo de configuración o comando del entorno específico del SO ( ) (como ldconfig(8)) que registra las rutas utilizadas para buscar bibliotecas.
  • sistema de construcción: puede haberVariables de entornocomo LDFLAGSindicadores de línea de comando o configuraciones de archivos de configuración; mutttiene --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 de make) 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.sonormalmente 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 -lxxxeste archivo.libxxx.so

Si desea vincular con otra versión, debe especificar el nombre de ruta completo de la biblioteca.

información relacionada