Soy un novato de cómo funcionan las bibliotecas compartidas en Linux. Estoy tratando de entender cómo las aplicaciones resuelven diferentes revisiones de la misma biblioteca compartida en tiempo de ejecución en Linux.¿Cómo se resuelven las aplicaciones a diferentes versiones de bibliotecas compartidas en tiempo de ejecución?
Por lo que yo entiendo, una biblioteca compartida tiene tres "nombres", por ejemplo,
- libmy.so.1.2 (de nombre real es decir, el archivo obj real)
- libmy.so. 1 (SONAME, que está incrustado en el archivo obj real)
- libmy.so (nombre del enlazador, a condición de que el enlazador en tiempo de enlace y embebidos en ejecutable)
al instalar la biblioteca a través de ldconfig, se creará el siguiente símbolo lic une
- (2) => (1)
- (3) => (2)
Ahora digamos que puedo compilar otra versión de la misma biblioteca con la siguiente con el nombre verdadero , libmy.so.2.0. El SONAME por directrices sería libmy.so.2.0
En el momento del enlace de la aplicación, cuál es el nombre del enlazador que proporcionaría con el indicador "-l". Siguiendo las pautas que leí (http://www.dwheeler.com/program-library/Program-Library-HOWTO/x36.htm l), ¿no tendría que ser libmy.so y, en caso afirmativo, cómo se distinguirían ambas versiones del archivo obj?
Me sorprendió a la mitad de escribir mi respuesta. Ahora solo puedo agregar que si el OP es curioso, podría verificar los sonames de las bibliotecas preinstaladas en su sistema con 'readelf' como este:' readelf -Wa /usr/lib/libstdc++.so.6 | grep SONAME' y ver cómo se ponen en práctica las directrices. –
Sí, eso fue un error de edición de mi parte, realmente quise decir "libmy.so.2". Entonces, si sigo las tres viñetas correctamente, mientras enlazo con una versión mayor anterior, simplemente puedo especificar el SONAME correspondiente. Debo decir que muchos de estos documentos de ayuda son engañosos sobre esto. Siempre discuten solo la parte sobre la vinculación con la última revisión importante, sin calificar explícitamente este hecho. – nisah