Pregunta

Tengo un programa que está estáticamente ligarse a una biblioteca (libA.2.0.a) y también enlaces dinámicamente a otra biblioteca (libB.so). libB.so también vincula dinámicamente a una versión anterior de Liba (libA.1.0.so).

Es posible esta configuración? Y si es así, ¿cómo sabe el sistema a utilizar los símbolos de libA.2.0.a para mi programa y los símbolos de libA.1.0.so para libB.so?

¿Fue útil?

Solución

Sí, esta configuración es posible.

En respuesta a su pregunta de cómo el sistema sabe cómo utilizar los símbolos, recuerde que todas las conexiones se realizan en tiempo de compilación. Después de que ha sido construido, no es una cuestión de "símbolos", solo las llamadas a diferentes funciones en diferentes direcciones.

Cuando la construcción de libB.so, en ella se establece que de los enlaces a libA.1.0.so. No se sabe ni le importa lo que otras aplicaciones que utilizan lo hará, sólo se sabe cómo asignar sus propias llamadas a funciones.

Cuando la construcción de la propia aplicación, los vínculos de aplicación a libB.so. Cualquiera que sea libB.so llama es completamente desconocido para la aplicación. La aplicación también se vincula estáticamente a una biblioteca, que libB.so no le importa.

Una Gotcha: si Liba utiliza variables estáticas, habrá un grupo de la estática de acceso a libB.so, y un conjunto independiente distinta de la estática de acceso a la aplicación.

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