Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2011, 12h33   #1
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 69
Points : 34
Points : 34
Par défaut Bibliothèques, plug-ins et édition de liens

Bonjour,
J'ai un problème avec le développement d'une application en C++/Qt sous Win 7(64 bits). L'application elle-même est juste un chargeur de plugins qui fournissent les fontionnalités. Le code source est structuré comme suit :
  • Un dossier libs qui contient du code générant des bibliothèques partagées internes au projet.
  • Un dossier plugins qui contient le code des différents plugins de l'application. Chaque plugin dépend de plusieurs bibliothèques du dossier libs.
  • ...
Après compilation, les bibliothèques sont générées dans un dossier lib, les plugins dans un dossier plugins et l'exécutable dans un dossier bin.
Vous pouvez voir le code source du projet ici.
Depuis le début du projet, je développais sous GNU/Linux, je n'ai eu aucun problème d'éditions de liens. Mais sous Win 7 maintenant, lors de la compilation des plugins, il semble qu'ils ne puissent charger aucune de mes bibliothèques. J'ai des erreurs du genre
Code :
undefined reference to ...
Comme dit précédemment, tout marchait parfaitement sous GNU/Linux.
Bref, j'ai exécuté Dependency Walker sur mes bibliothèques, il a indiqué qu'il manquait ieshims.dll et gpsvc.dll. J'ai trouvé le premier par contre le second bien qu'étant présent semble être en 64 bits alors que mes bibliothèques et les bibliothèques de Qt sont en 32 bits.

J'ai besoin d'aide pour résoudre ce problème. Est-ce que cette dll manquante peut en être à l'origine ou le problème vient d'ailleurs ?

Merci.
Feysal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h48   #2
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 69
Points : 34
Points : 34
Apparemment, contrairement aux systèmes Unix, sous Windows on doit spécifier explicitement quelles classes sont visibles publiquement lorsqu'on crée des bibliothèques partagées.
Je mets le code là au cas où d'autres personnes (débutantes comme moi) auront un problème similaire

Dans un .h

Code :
1
2
3
4
5
6
7
8
 
/* library_global.h */
 
#if defined(LIBRARY)
#  define LIBRARY_EXPORT __declspec(dllexport)
#else
#  define LIBRARY_EXPORT __declspec(dllimport)
#endif
La définition de chaque classe se fera comme ceci

Code :
1
2
3
4
5
6
7
 
#include "library_global.h"
 
class LIBRARY_EXPORT MyClass
{
    ...
};
Lorsqu'on utilise Qt, on peut utiliser les macros Q_DECL_IMPORT et Q_DECL_EXPORT à la place de __declspec(dllexport) et __declspec(dllimport). On peut aussi ajouter DEFINES += LIBRARY dans le .pro .

Bref, c'était çà mon problème, j'aurais au moins appris quelque chose de nouveau.
Feysal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h37.


 
 
 
 
Partenaires

Hébergement Web