soname se utiliza para indicar lo que la compatibilidad binaria api su apoyo biblioteca.
SONAME
se utiliza en tiempo de compilación por enlazador para determinar a partir del archivo de la biblioteca lo real versión de la biblioteca de destino. gcc -l NAME
buscará la lib .so NAME
enlace o archivo y luego capturar su SONAME que sin duda ser más específicos (por ejemplo libnuke.so enlaces a libnuke.so.0.1.4 que contiene SONAME libnuke.so.0).
En tiempo de ejecución se vinculará con esto luego se establece en la sección dinámica ELF NEEDED
, entonces una biblioteca con este nombre (o un enlace) debe existir. En tiempo de ejecución SONAME
se descarta, por lo que solo el enlace o la existencia del archivo es suficiente.
Observación: SONAME solo se aplica durante el tiempo de enlace/compilación y no en tiempo de ejecución.
'SONAME' de la biblioteca se puede ver con '-p fichero objdump | grep SONAME'. 'NECESARIO' de binarios se puede ver con 'objdump -p archivo | grep NECESARIO'.
[EDITAR] ADVERTENCIA La siguiente es una observación general, no la que se despliega en Linux. Ver al final.
Supongamos que usted tiene una biblioteca con el nombre libnuke.so.1.2 y desarrolla una nueva biblioteca libnuke:
- si su nueva biblioteca es una solución de la anterior sin cambio de API, sólo debe mantener misma soname , aumenta la versión de nombre de archivo. es decir, el archivo será libnuke.so.1.2.1 pero soname seguirá siendo libnuke.so.1.2.
- si tiene una nueva biblioteca que solo agregó una nueva función pero no rompió la funcionalidad y sigue siendo compatible con la anterior, le gustaría usar el mismo soname que el anterior más un nuevo sufijo como .1. es decir, file y soname serán libnuke.so.1.2.1. Cualquier programa vinculado con libnuke.1.2 seguirá funcionando con ese. Los nuevos programas vinculados con libnuke.1.2.1 solo funcionarán con ese (hasta que la nueva subversión llegue como libnuke.1.2.1.1).
- si su nueva biblioteca no es compatible con ningún libnuke: libnuke.so.2
- si su nueva biblioteca es compatible con la versión antigua: libnuke.so.1.3 [es decir, sigue siendo compatible con libnuke.so.1]
[EDITAR] para completar: caso de linux.
En SONAME vida real Linux como una forma específica:. lib [NOMBRE] [API-VERSION] .so [major-version] versión principal es sólo un valor entero que aumentar en cada cambio importante biblioteca. API-VERSIÓN está vacío por defecto
ex libnuke.so.0
A continuación, el nombre de archivo real, incluyen versiones y subversiones menores ejemplo: libnuke.so.0.1.5
creo que no proporcionar un soname es una mala práctica ya que el cambio de nombre del archivo cambiará su comportamiento.
Philippe, de acuerdo con David A. Wheeler (http://bit.ly/1CkQJmR), el soname tiene un único número de versión, como libnuke. so.1 o libnuke.so.4. ¿Sabes si un segundo número de versión puede ser parte del soname, como libnuke.so.1.2? –
Bueno, existen sonmae con múltiples dígitos, por ejemplo para la biblioteca de openssl: SONAME: libssl.so.0.9.8, pero tienes razón, es más general que "Program Library HOWTO" que es debian que parece más restrictivo de hecho –
Pareces para describir que el nombre del archivo y el nombre del sonido se deben establecer de forma diferente, pero no se describe cómo debe configurarse el nombre del sonido en los casos posteriores. – poolie