2010-08-23 1 views
0

J'ai une application X qui utilise des bibliothèques partagées A, B et C. La bibliothèque partagée C utilise aussi des symboles de la bibliothèque partagée A. L'application X est liée à A et B pendant la compilation et elle ouvre pour charger C au moment de l'exécution .Est-il utile de lier une bibliothèque partagée à d'autres bibliothèques partagées?

Ma question est:

Est-ce une bonne idée de créer un lien C contre A pendant le temps de lien ou de laisser la résolution de symbole pour l'exécution?

+0

Je ne savais pas que tu pouvais ^^ –

Répondre

2

Votre option 1. Mais cela ne fonctionne pas de cette façon.

  1. Vous lien C avec A. Comme
    A est une dynamique lib cela ne fera rien phsically.
    Il vérifie que toutes les dépendances seront satisfaites par A lors de l'exécution.

  2. Lors de l'exécution lorsque vous DLOpen() le répertoire lib partagé C
    Il ouvrira ses portes C et si vous ne l'aviez pas déjà lié contre A, il serait également ouvrir un
    Mais depuis est déjà ouvert, il va juste résoudre les symboles dans C avec le A qui est ouvert.

+2

Il pourrait y avoir un problème si l'application et la bibliothèque C sont liées aux différentes versions majeures de bibliothèque A. Ensuite, les deux versions majeures vont se charger et leurs symboles se mélangent, à moins qu'il y ait des versions de symboles. –

+0

Oui. Mais c'est un problème distinct. Essayons de nous concentrer sur le problème en question (qui, dans ce cas, n'est pas un problème). Si nous voulons entrer dans le versionnement alors le PO devrait poster une question spécifique à ce sujet. –

0

Je voudrais aller avec l'option 2. Laisser la résolution pour l'exécution. La reliure tardive est la meilleure option. Aussi je n'ai jamais su que l'option 1 était possible :)

Questions connexes