Question

J'ai un programme qui relie statiquement à une bibliothèque (libA.2.0.a) et aussi des liens dynamiquement vers une autre bibliothèque (libB.so). libB.so également des liens dynamiquement à une ancienne version de Liba (libA.1.0.so).

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

Était-ce utile?

La solution

Oui, cette configuration est possible.

En réponse à votre question de savoir comment le système sait comment utiliser les symboles, rappelez-vous que tous les liens se produisent au moment de la construction. Une fois qu'il a été construit, il est une question de « symboles », appelle simplement à diverses fonctions à différentes adresses.

Lors de la construction libB.so, il met en place ses liens à libA.1.0.so. Il ne sait pas ce que les autres ou les soins des applications qui l'utilisent fera, il sait exactement comment cartographier ses propres appels de fonction.

Lors de la construction de l'application elle-même, les liens d'application à libB.so. Quels que soient les appels libB.so est totalement inconnu à l'application. L'application relie également statiquement à une bibliothèque, qui libB.so ne se soucie pas.

Un Gotcha: si Liba utilise des variables statiques, il y aura une série de statics accessibles à libB.so, et un autre, ensemble indépendant de statics accessibles à l'application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top