Sólo tengo una PC con Linux instalado. Sin embargo, tengo varias versiones de la misma biblioteca. Debido a que un software diferente puede depender de diferentes versiones de la misma biblioteca, tengo que mantenerlos todos en el sistema.

¿Tiene alguna buena idea para que sigan funcionando bien?

Cualquier referencia es bienvenida.

[Actualizar]

Por ejemplo:

Tengo dos versiones de g++, por ejemplo, g++4.8 y g++5.2.

Quiero que sus archivos relacionados se almacenen en diferentes rutas como: /soft/g++/4.8/y/soft/g++/5.2

Cuando uso g++, puedo cambiar fácilmente la versión con un simple comando. He encontrado la gestión del entorno de software.http://modules.sourceforge.net/

Respuesta1

Si su biblioteca define susonamecorrectamente, podrás tener varias versiones instaladas sin ninguna dificultad. Por ejemplo, actualmente tengo libreadlineinstaladas tres versiones:

$ ls -l /lib/x86_64-linux-gnu/libreadline.so.*
lrwxrwxrwx 1 root root     18 Dec  4  2015 /lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 263352 Dec  4  2015 /lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root     18 Oct  4  2016 /lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 296792 Oct  4  2016 /lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root     18 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 309168 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7.0

Esto funciona porque los programas se vinculan al soname, por lo que cualquier cosa creada para la versión 5 se vincula con libreadline.so.5, cualquier cosa creada para la versión 6 se vincula con libreadline.so.6etc. El requisito en el lado de la biblioteca es que todas las versiones con el mismo soname deben preservar su ABI: las nuevas versiones pueden agregar características, pero no pueden romper las características existentes. Cualquier cambio importante implica un aumento en el nombre.

Si todo esto se hace correctamente (en el lado de la biblioteca), nunca debería necesitar varias versiones de una biblioteca con elmismosoname: siempre que tengas la última versión, podrás ejecutar cualquier software creado con cualquier versión de la biblioteca con el mismo soname. Siguiendo con el libreadlineejemplo, el software creado con la versión 5.1 de la biblioteca funciona bien con la versión 5.2. (Lo contrario no es necesariamente cierto; el software que utiliza nuevas funciones en 5.2 no se ejecutará en 5.1).

Podría valer la pena investigarlo libtool(sí, lo sé) si aún no lo estás usando: tiene una funcionalidad razonablemente utilizable.esquema de versionesque maneja los golpes de soname.

Algunas bibliotecas hacen todo lo posible para minimizar la necesidad de cambios de nombre; la biblioteca GNU C es un ejemplo, utiliza ampliamente el control de versiones de símbolos para evitar romper la ABI y al mismo tiempo introduce nuevas características y cambios incompatibles con versiones anteriores (simplemente mantiene las versiones antiguas,adentrola biblioteca).

información relacionada