Pregunta

Me pregunto cuál es el valor posible para * _la_LDFLAGS en Makefile.am?

Si hago esta pregunta, es porque me gustaría lo siguiente:

Actual shared library : libA.so (or with the version number I don't care)
Symbolic links :        libA-X.Y.Z.so, libA-X.so, libA.so 
soname :                libA-X.so

Sin embargo, esto es lo que obtengo al usar la marca -release :

Actual shared library : libA-X.Y.Z.so
Symbolic links :        libA.so 
soname :                libA-X.Y.Z.so    !!! this is not what I want 

También probé sin banderas y obtuve

Actual shared library : libA-0.0.0.so    !!! 0.0.0 and not the real version
Symbolic links :        libA.so, libA-0.so
soname :                libA-0.so        !!! 0.0.0 and not the real version

¿Qué debo hacer? ¿Qué bandera debo usar?

Gracias de antemano

¿Fue útil?

Solución

Debe usar la opción -version-info de Libtool para especificar la versión de la interfaz de la biblioteca, pero asegúrese de leer cómo funciona el control de versiones (o aquí para el manual oficial.)

También puedes jugar con -release para que el número de versión de tu paquete sea más aparente, pero dudo que alguna vez obtengas el nombre exacto que deseas. Libtool tiene su propio conjunto de reglas para definir cómo nombrar el archivo y qué enlaces simbólicos crear según el sistema: realmente deben considerarse como detalles de implementación de cómo se instala una biblioteca compartida.

Otros consejos

En mi humilde opinión, el diseño que desea está roto. Las aplicaciones que están vinculadas a su biblioteca dependerán de libA-X.so debido a su nombre. Pero, ¿qué sucede cuando libA.so es la versión X + 1? ¿A qué apuntará el enlace simbólico libA-X.so?

La idea detrás del diseño que se obtiene con el indicador -release es que, cuando una aplicación se vincula con -lA, se vinculará con la última versión. Entonces, debido al soname, dependerá de libA-X.Y.Z.so en el tiempo de ejecución. Cuando instale una nueva versión de la biblioteca, se instalará una nueva libA-X.Y.Q.so, pero dejará solo la antigua, exactamente como lo esperan las aplicaciones antiguas que dependen de ella. Las nuevas aplicaciones seguirán, debido al enlace simbólico libA, a la última versión.

Los años de reflexión de algunas personas muy inteligentes han pasado a un esquema de versiones que permite que las nuevas aplicaciones se vinculen con la última versión de una biblioteca, al tiempo que permiten que coexistan varias versiones pacíficamente para satisfacer las dependencias de las aplicaciones que las necesitan. Mi consejo es, no dejes de adivinar todo eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top