2011-07-08 3 views
2

Est-il possible de fournir une bibliothèque partagée - qui est liée à une autre bibliothèque partagée lors de sa création - transparente pour l'utilisateur final?Bibliothèque partagée, dépendance de bibliothèque

À titre d'exemple de ce que je veux dire:

Bibliothèque partagée Créer

g++ ... `pkg-config gtk+-2.0 --cflags` ... `pkg-config gtk+-2.0 --libs` 

désiré utilisateur Créer

g++ file.cc -lfoo 

libfoo.so.0 est la bibliothèque partagée.

Je ne peux sembler fonctionner correctement que si la construction de l'utilisateur inclut le pkg-config gtk+-2.0 .... Est-il possible, lors de la création de l'objet partagé, de permettre à l'utilisateur final de ne pas avoir à se soucier des bibliothèques indirectes utilisées dans libfoo?

+0

est-il possible que vous preniez une version statique de la bibliothèque gtk lib istead? Si c'est le cas, il sera également nécessaire pendant le lien de l'utilisateur. Sinon, s'il utilise vraiment la bibliothèque partagée, elle ne devrait pas être requise au moment de la construction mais SERA requise lors de l'exécution. –

Répondre

3

Si vous avez une bibliothèque partagée libABC.so qui relie à libXYZ.so puis,
tout en créant votre libABC.so, vous devez créer un lien avec libXYZ.so

ld --shared -o libABC.so -L. -lXYZ 

Lors de la compilation de l'application,

gcc app.c -L. -lABC 

don 'oubliez pas, exporter le chemin de la bibliothèque

export LD_LIBRARY_PATH=. 
+0

+1, vous pouvez également définir 'DT_RPATH' avec' -Wl, -rpath, .' au lieu de s'appuyer sur la variable d'environnement 'LD_LIBRARY_PATH'. –

Questions connexes