Bonjour à tous.
Depuis peu de temps je travaille sur la gestion des librairies .so en vue de faire un projet perso.
Je suis sous linux (ssh gcc débian) et j'ai fais un petit programme qui se termine par un segfault. J'explique :
J'ai mon programme principal X qui charge une lib.so Y. Sur cette lib Y j'ai juste mis en extern "C" une fonction d'initialisation que mon programme principal appelle en y passant en argument un pointeur vers un objet (classe). Cette classe est compilée à la fois dans le programme principal et à la fois dans la lib. Les deux ont donc la même.
Ma lib appelle une méthode de l'objet (créé par le programme principal). Cette méthode instancie dynamiquement (new ...()) et met en mémoire des données.
je fais un dlclose() de la lib. Si mon programme fait un delete sur l'objet créé j'ai droit à un segfaut. Si je fais pas le dlclose() ça marche.
Je cherche donc à comprendre pourquoi.
Pour moi si ma lib alloue de la mémoire avec un new, cette mémoire devrait toujours rester accessible même si je fais un dlclose. J'ai l'impression que le fait que ce soit ma lib qui appelle la methode de la classe, alloue la mémoire dans une partie qui devient innaccessible une fois le dlclose() fait.
Existe il une solution ? Ma méthode de travail n'est ptet pas la bonne.
Merci à tous de votre aide.