Bonjour,

Je rencontre un problème dans le chargement des librairies dynamique sous Unix.
Sur un point de vue de conception j'ai le schéma suivant pour les librairies:
(Je ne sais pas si il est compatible, c'est pourquoi le le précise)

Interface -> Classe Abstraite -> Spécialisation ("Abstraite", pas destinée à être instanciée) -> Classe à mettre en lib.
(-> représente un héritage).

La fonction que j'utilise pour exporter ma classe est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
// Fichier LibTest.cpp
 
#include ... // Dependances de la classe
#include "MaClasse.hh"
 
extern "C" {
      MaClasse *createInstance(void) { return (new MaClasse(param1, param2...)) }
}
Puis compile avec la ligne suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
g++ -fPIC -shared LibTest.cpp -o LibTest.so
Dans ce cas là, cela compile et la lib est bien créée.
Cependant, sans surprise, le chargement échoue au moment du load d'une des fonctions de la classe puisqu'elles ne sont pas présente dans la librairie compilée.

Cependant si je rajoute la fonction précédemment citée dans le fichier MaClasse.cpp, avec donc, les fonctions de la classe. La librairie compile une nouvelle fois mais dlopen() renvois toujours NULL... et la librairie ne peut plus être ouverte... et les fonctions de la classe encore moins chargées par conséquent.

J'avoue un peu caller sur les raisons du problème... c'est comme si rajouter les fonctions de la dite classe rendait la librairie corrompue bien qu'elle compile.

Des pistes sur un tel problème ?

Merci d'avance.