2009-08-06 7 views
1

J'ai un programme qui lie statiquement à une bibliothèque (libA.2.0.a) et qui lie dynamiquement à une autre bibliothèque (libB.so). libB.so également des liens dynamiques à une ancienne version de libA (libA.1.0.so).Liaison statique et dynamique de la même bibliothèque

Cette configuration est-elle possible? Et si oui, comment le système sait-il utiliser les symboles de libA.2.0.a pour mon programme et les symboles de libA.1.0.so pour libB.so?

Répondre

5

Oui, cette configuration est possible.

En réponse à votre question sur la façon dont le système sait utiliser les symboles, rappelez-vous que tous les liens se produisent au moment de la construction. Après qu'il a été construit, il ne s'agit pas de "symboles", il suffit d'appeler diverses fonctions à différentes adresses.

Lors de la construction de libB.so, il établit ses liens vers libA.1.0.so. Il ne sait pas ou ne se soucie pas de savoir ce que font les autres applications qui l'utilisent, il sait juste comment cartographier ses propres appels de fonction.

Lors de la création de l'application elle-même, l'application est liée à libB.so. Quels que soient les appels libB.so, ils sont complètement inconnus de l'application. L'application établit également des liens statiques avec une bibliothèque, ce qui ne concerne pas libB.so. On obtient: si libA utilise des variables statiques, il y aura un ensemble de statiques accessibles à libB.so, et un ensemble de statiques indépendant et différent accessible à l'application.

+0

Merci pour la clarification! Informations très utiles –

Questions connexes