Bonjour,
Voilà mon problème. Je fais un petit programme qui reçoit en entrée un ficher XML contenant entre autres une liste de librairies (.so) à charger.
Ce fichier contient également le ou les répertoires dans le(s)quel(s) on peut trouver ces librairies.
Un exemple de fichier :
Mon programme parse ce petit fichier, puis tente de charger dynamiquement les librairies.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <Appli> <LibDir mode="relative" name="./Lib" /> <LibDir mode="absolute" name="/home/noodles/Lib" /> <Dependency lib="action1.so" /> <Dependency lib="action2.so" /> </Appli>
Ma première idée était que le programme rajoute dans la variable d'environnement LD_LIBRARY_PATH les chemins fournis, pour pouvoir charger les librairies.
J'ai donc procédé comme ceci :
Ce code marche bien (j'ai vérifié en faisant getenv("LD_LIBRARY_PATH")). Mais quand je fais dlopen(), il me dit qu'il ne trouve pas la librairie, comme si le nouveau LD_LIBRARY_PATH n'était pas pris en compte. Après quelques recherches, j'ai l'impression que le programme charge les variables d'environnement à son lancement, et donc ne les met pas à jour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 string ld = "LD_LIBRARY_PATH=" + libDir; //libDir parsé depuis le XML if (putenv(const_cast<char *>(ld.c_str())) == -1) printf("putenv failed \n");
Je me suis donc dis que j'allais mettre directement dans le XML, les chemins complets des librairies. Malheureusement, cela ne marche pas non plus parce que quand dlopen() essaie de resoudre les dépendances, il n'y a pas ce qu'il faut dans le LD_LIBRARY_PATH!
Donc pour résumer, ma question est : peut-on en C (ou C++), modifier la variable LD_LIBRARY_PATH qui est prise en compte par dlopen() pour ajouter des chemins à prendre en compte...
Merci
Noodles
Partager