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

  FORUM HardWare.fr
  Programmation
  C++

  Problème de librairies dynamiques

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de librairies dynamiques

n°1938447
4fiji
Posté le 06-11-2009 à 16:59:10  profilanswer
 

Bonjour tout le monde,
 
Alors je vous explique mon problème avant de perdre definitivement la boule...
Je suis en train de dévelloper une application a base de modules et de plugins avec la librairie wxWidgets.
J'aurait quelques questions sur les libraires dynamiques (.dll sous win et .so sous linux).
 
Quand sous linux on cree une librairie dynamique on se retrouve avec un fichier malib.so et c'est tout.
Pour charger les fonctions de la librairie de maniere portable il suffit de charger la lib puis de recuperer les symboles dans le programme les utilisant (wxDynamicLibrary::GetSymbol).
Mais est on obligé de recuperer manuellement les symboles a chaque fois ??
Il est pas possible dautomatiser tout ca?? Par exemple en ayant juste un .h a inclure qui contient les definitions des fonctions ??
 
Merci de votre aide. :)
 
PS: jutilise code::blocks sous linux

mood
Publicité
Posté le 06-11-2009 à 16:59:10  profilanswer
 

n°1938507
tpierron
Posté le 06-11-2009 à 19:57:51  profilanswer
 

La liaison entre le .dll et ton application passe par un .a (ou un .o si ta dll ne fait qu'un seul fichier (peu probable)).
 
Dans le cas d'une lib statique, le .a contient le code intégral de toutes les fonctions. Dans le cas d'une dll, le .a contient le morceau de code qui ira chercher la référence dans le fichier .dll: ça revient à charger la dll s'il elle n'est pas déjà et récupérer l'adresse de la fonction.
 
Le truc c'est que le .a contient le nom de la dll à charger. Donc tu ne peux pas utiliser un même .a pour des dll avec des noms différents, ce qui est certainement le cas avec un système de plugin. Là tu es obligé de chargé ça à la main.
 
Avec  C::B, il te génère tout ça comme un grand, pour peu que tu lui indiques ça dans Project => Properties => Build targets

n°1938695
4fiji
Posté le 08-11-2009 à 00:37:03  profilanswer
 

Tout d'abord merci pour ta réponse.
Vu ce que j'ai l'intention de faire il vaut mieux comme tu l'as dit de charger tout à la main.
J'avais aussi pensé créer une librairie d'import au début mais ca ne fonctione que sous Windowx d'après le wiki de C::B (http://wiki.codeblocks.org/index.php?title=Project_file#Create_import_library) et de plus ca ne correspond pas trop pour un système de plugin.
 
Juste encore une question:
Quand on crée une DLL avec une classe qui contient des fonctions membres statiques, comment fait on pour les importer dans le programme qui l'utilise?? Je sais que pour les fonctions normales il suffit de faire un GetSymbol("mafonction" ) mais pour les fonctions statiques on fait comment?? Faut il créer une instance de la classe ou bien peut on y acceder directement avec un GetSymbol("maclasse::mafonction" ) ??
 
Merciiiiiiiiiiii :p

n°1938710
Joel F
Real men use unique_ptr
Posté le 08-11-2009 à 10:22:21  profilanswer
 

En géénral, c'ets mieux d'éviter l'export de ce genre de fonction et voir éviter d'exporter des classes tout court. Mieux vaut passer par une famille de fonction-usine qui te renvoit une instance ou bien qui forward l'appel à la statique correspondante


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

  Problème de librairies dynamiques

 

Sujets relatifs
Eclipse, SVN, EJB (probleme)Problème rapidité de mise en pause
Problème fichier de configuration hibernateProbleme d'écriture pour un client (JAVA)
probléme d'insertion de caractères accentués dans un xml via phpprobléme d'insertion de caractères accentués dans un xml via php
Problème placement JButtonproblème affichage sous IE
Texte dynamique + masque = probleme[Offset] problème
Plus de sujets relatifs à : Problème de librairies dynamiques


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