Chargement de fichier *.so sous Linux - C++ - Programmation
Marsh Posté le 03-12-2002 à 14:57:50
Ça ressemble un peu à ça. J'ai fait légèrement le ménage de manière garder seulement l'essentiel (il y a un 20aine de classes en tout mais les autres ne sont pas utilisées pour ce test).
Code :
|
Au début je me suis dit que je devais peut-être rajouter l'option -c pour Mineur.so mais ça me fait une erreur lorsque je mets cette option.
Marsh Posté le 03-12-2002 à 15:18:28
C'est correct, ca...
Donc le problème est ailleurs.
j'ai jamais utilisé dlopen() avec du c++, seulement du c
c'est pas un probleme d'incompatibilité entre les deux ?
sinon, solution de rechange, tu as essayé de mettre aussi Ressource dans ta bibliothèque ?
Marsh Posté le 03-12-2002 à 15:31:22
Je pense justement que le problème vient de l'incompatibilité entre le C et le C++.
Marsh Posté le 04-12-2002 à 10:42:58
Taz@PPC a écrit a écrit : à lire le mnuale de make; faut pas utiliser -c et -o en meme temps |
pourtant je le fais aussi
et ca marche en plus
Marsh Posté le 04-12-2002 à 10:43:57
lorill a écrit a écrit : pourtant je le fais aussi et ca marche en plus |
Bah, a part foutre la merde en changeant le nom par défaut des .o, je vois pas l'intêret
Marsh Posté le 04-12-2002 à 10:44:21
kadreg a écrit a écrit : Bah, a part foutre la merde en changeant le nom par défaut des .o, je vois pas l'intêret |
les foutre dans un autre répertoire
Marsh Posté le 04-12-2002 à 17:55:32
Merci bien, j'ai règlé mon problème.
J'ai une autre question par contre : dans ma classe, j'ai des objets OpenGL et une méthode Afficher(). Cependant, lorsque je compile, les composantes OpenGL n'ont pas l'air de se linker correctement.
Le makefile :
Fermier.so : Fermier.cpp Fermier.h
g++ -shared -o Fermier.so Fermier.cpp -L/usr/X11R6/lib -lGL -lGLU -lglut -lXi -lXmu -lXext -lX11 -ldl -lm
Quand je fais la commande nm Fermier.so, il m'indique que les fonctions OpenGL n'ont pas de symboles (elles sont précédés de U)
Ex : U gluDeleteQuadric
U gluNewQuadric
U gluQuadricDrawStyle
U gluQuadricNormals
U gluSphere
Je suis capable d'accéder à mes autres méthodes de la classe mais si j'utilise la méthode Afficher() ça ne compile même plus.
Que dois-je faire ?
Marsh Posté le 03-12-2002 à 14:48:25
Bonjour !
J'ai un petit problème concernant le chargement de fichiers *.so (librairies dynamiques). Voilà mon problème :
j'ai une classe "Mineur" qui hérite d'une classe "Personnage". Dans la classe personnage, j'ai un attribut "protected" qui s'appelle "Cout" et qui est de type "Ressource", une autre classe. Dans le constructeur de "Mineur", je dois initialiser l'attribut Cout au moyen de la méthode "Ressource::SetRessource(int, int, int, int)" donc dans le constructeur je fais Cout.SetRessource(1,2,3,4)
Vous me suivez?
Mon but est de créer le classe "Mineur" en librairie dynamique (Mineur.so) et de l'appeler à partir d'un programme. Cependant, lorsque j'essaie d'ouvrir le fichier avec la fonction "dlopen" il me génère une erreur suivante :
./Fermier.so: undefined symbol: SetRessource__9Ressourceiiii
Est-ce que quelqu'un a une idée sur le sujet ? Merci.
---------------
Je suis un franco-canado-québécois d'origine française de l'Amérique du nord francophone.