mercredi 13 janvier 2010

Utilisation de bibliothèques dynamiques en C++

Vous essayez de manipuler ça pour que vos programmes soit plus utilisables ?
Ok, c'est pas SI compliqué .

Tout d'abord, pas de baratin, voilà LA page que vous DEVEZ consulter pour comprendre tout ça rapidement et simplement :

http://hiko-seijuro.developpez.com/articles/bibliotheque-dynamique


MAis, ...croyez-moi, ça va pas vous suffire quand même.

Y'a un souci majeur : les dépendances des librairires dynamiques qu'on utilise.

Voici mon exemple.

class c1  qui est tranformée en librairie l1
class c2  et c3 qui sont transformées en l2

dans mon main,
je load la librairie l2, et j'utilise c2,
je load la librairie l1, et j'utilise c1

je fais ces loads à partir du chemin absolu des librairies car ce sont les miennes et elles sont pas enregistrées dans usr/lib ou je ne sais quel autre.
(ou j'utilise une factory comme c'est proposé dans le tuto (qui est super hein ;) )).


Ma classe c1 elle hérite d'une classe c3.

Donc quans je load ma librairie l1, mon appel à dlfcn va automatiquement chercher à loader la librairie l2 dont dépend l1.

Et là GROS problème car dlfcn cherche les chemins "systeme" et ne trouve donc plus ma librairie l2.

Solution :

vous utilisez la commande :

env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:le_chemin_vers_vos_librairies ./votre_executable



Vous pouvez mettre ça dans un script bash bien sûr ;).
Il vous reste uniquement à indiquer les chemins vers vos librairies perso pour que dlfcn les trouve lors de l'exécution.


Voilou,
enjoy

Aucun commentaire:

Enregistrer un commentaire