2009-03-21 11 views
0

J'ai une bibliothèque partagée dit "libeval.so". J'utilise ceci dans mon projet pour créer sur plus de bibliothèque partagée appelée "lidpi.so". La bibliothèque appelée "libdpi.so" est utilisée par un outil. Maintenant, cet outil ne peut voir aucune autre bibliothèque autre que "libdpi.so". J'utilise peu d'appels de fonctions présents dans "libeval.so", et ceux-ci ne sont pas présents dans "libdpi.so". Y at-il un commutateur dans gcc, ou quelque chose pour surmonter cela.créer une bibliothèque partagée en utilisant une autre bibliothèque dans linux

+1

Je ne m'attendrais à aucun problème. l'outil serait lié à libpi, et si libpi a besoin d'une autre bibliothèque, il se chargera de le charger à l'exécution lui-même. l'outil ne devrait pas s'en soucier. –

Répondre

2

Si libdpi.so est conçu de sorte qu'il puisse ouvrir libeval.so, alors votre programme doit seulement savoir environ libdpi.so.

Plus précisément, libdpi.so devrait avoir une fonction qui appelle dlopen, probablement comme ceci:

dlopen("path/to/libdpi.so", RTLD_LAZY); 

Ensuite, d'autres fonctions peuvent libdpi.so interface avec libeval.so.

Modifier: Pour construire une bibliothèque partagée, utilisez cette commande:

gcc -shared -o libdpi.so [list of object files to go in libdpi.so] 

Note: Lorsque vous construisez vos objets, utilisez l'argument de commande -fPIC avec gcc, comme ceci:

gcc -fPIC -o foo.o foo.c 
+0

Je ne suis pas sûr comment libdpi.so est créé :( – Alphaneo

+0

Salut en quelque sorte, l'option suivante semble fonctionner :) gcc -fPIC $ (ALL_OBJ) $ (ALL_PATH) -leval -shared -o libdpi.so Je vais essayer de trouver une explication :) J'ai également fait quelques recherches sur votre suggestion. C'est probablement une bonne méthode pour charger la bibliothèque, je suppose. – Alphaneo

Questions connexes