Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3058 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Chargement de fichier *.so sous Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Chargement de fichier *.so sous Linux

n°259741
Matheo
Pourquoi moi ?
Posté le 03-12-2002 à 14:48:25  profilanswer
 

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.
mood
Publicité
Posté le 03-12-2002 à 14:48:25  profilanswer
 

n°259742
lorill
Posté le 03-12-2002 à 14:50:51  profilanswer
 

dis voir comment tu compiles, pour commencer

n°259749
Matheo
Pourquoi moi ?
Posté le 03-12-2002 à 14:57:50  profilanswer
 

Ç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 :
  1. test : main.o Mineur.so Personnage.o Ressource.o
  2. g++ -g -o test main.o Personnage.o Ressource.o -ldl -lm
  3. main.o : main.cpp
  4. g++ -g -c -o main.o main.cpp
  5. Mineur.so : Mineur.cpp Mineur.h
  6. g++ -shared -o Mineur.so Mineur.cpp
  7. Personnage.o : Personnage.cpp Personnage.h
  8. g++ -g -c -o Personnage.o Personnage.cpp
  9. Ressource.o : Ressource.cpp Ressource.h
  10. g++ -g -c -o Ressource.o Ressource.cpp

 
 
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.


---------------
Je suis un franco-canado-québécois d'origine française de l'Amérique du nord francophone.
n°259768
lorill
Posté le 03-12-2002 à 15:18:28  profilanswer
 

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 ?

n°259782
Matheo
Pourquoi moi ?
Posté le 03-12-2002 à 15:31:22  profilanswer
 

Je pense justement que le problème vient de l'incompatibilité entre le C et le C++.


---------------
Je suis un franco-canado-québécois d'origine française de l'Amérique du nord francophone.
n°260395
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 04-12-2002 à 07:44:12  profilanswer
 

je vois 2 pb dans ton Makefile:
 
à lire le mnuale de make; faut pas utiliser -c et -o en meme temps
 
et si la lib partagée est modifiée, le binaire sera recompilé, donc aucun interet.


---------------
du bon usage de rand [C] / [C++]
n°260449
lorill
Posté le 04-12-2002 à 10:42:58  profilanswer
 

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  [:sinclaire]  
et ca marche en plus

n°260450
kadreg
profil: Utilisateur
Posté le 04-12-2002 à 10:43:57  profilanswer
 

lorill a écrit a écrit :

 
pourtant je le fais aussi  [:sinclaire]  
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


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°260451
lorill
Posté le 04-12-2002 à 10:44:21  profilanswer
 

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  [:sinclaire]

n°261037
Matheo
Pourquoi moi ?
Posté le 04-12-2002 à 17:55:32  profilanswer
 

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 ?


Message édité par Matheo le 04-12-2002 à 17:56:48

---------------
Je suis un franco-canado-québécois d'origine française de l'Amérique du nord francophone.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Chargement de fichier *.so sous Linux

 

Sujets relatifs
[Perl][Resolu] Comment connaitre le nom du proprietaire d'un fichier[Apache/htaccess] Comment protéger un seul fichier
[php] Upload de fichier et test de tailleexécution d'un fichier qui se situe en dehors du script pl
Date d'un fichier en PHPstrlen dans un fichier externe?
[XML|Java]Flux de fichiercross-compilation linux -> windows
Renommage et suppression de fichier[PHP] Cohabitation linux & windows pour les mails
Plus de sujets relatifs à : Chargement de fichier *.so sous Linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR