Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 4


|
Conversation (Résolue) : Utilisation des bibliothèques compilées wxpdfdoc |
Berti (Membre)
Inscrit le : 19-08-2012
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne |
Coucou les experts, me revoilou !
Grâce à Xaviou, j'ai finalement pu compiler wxpdfdoc et obtenir les bibliothèques avec les options de compilation adéquates.
J'essaie maintenant de compiler le tutorial1 du dossier wxpdfdoc\samples\minimal. J'ai testé auparavant que mon installation wxWidgets fonctionnait en compilant l'exemple wxWidgets-2.8.12\samples\minimal\minimal.cpp. Tout fonctionne !
Après avoir compilé wxpdfdoc, j'ai copié tout ce qui se trouvait dans le dossier include\wx et le dossier lib (dossier fonts et dossier vc_lib) dans les dossiers de mêmes noms qui se trouve dans le dossier de wxWidgets.
J'ai transformé tutorial1.cpp en main.cpp et gardé les mêmes paramètres que pour l'exemple minimal. J'ai rajouté dans projet\propriétés\propriétés de configuration\éditeur de liens\entrées\dépendances supplémentaires : wxcode_msw28ud_pdfdoc.lib
Je n'ai pas oublié (!) de modifier le traitement de wchat_t en tant que type intégr (=Non (/Zc:wchar_t-)).
En essayant de compiler avec l'EDI de visual c++ 2008 et les options debug win 32 unicode, le compilateur ne semble pas d'humeur joyeuse !!! Plusieurs warnings et des erreurs du type :
Code:wxcode_msw28ud_pdfdoc.lib(pdffontdatatype1.obj) : error LNK2001: symbole externe non résolu "public: class wxString __thiscall wxXmlNode::GetPropVal(class wxString const &,class wxString const &)const " (?GetPropVal@wxXmlNode@@QBE?AVwxString@@ABV2@0@Z)
Eh ben voilà , je suis bloqué. Je sais que j'abuse, mais si quelqu'un peut me donner un petit coup de pouce, ce ne serait pas de refus...
Merci !
Berti
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Salut.
Ben moi, j'y suis arrivé (mais j'ai eut les mêmes erreurs que toi, je te rassure).
En fait, il faut ajouter la lib "wxregexud.lib" dans les options du linker. Après ça, ça va encore foirer, car cette dernière lib a besoin d'une autre : "wxexpatd.lib".
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Berti (Membre)
Inscrit le : 19-08-2012
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne |
Salut Xaviou,
merci pour la réponse toujours très rapide et très claire !!!
As-tu utilisé la ligne de commandes ? Parce que moi, après avoir rajouté ces deux libs aux dépendances supplémentaires, la compilation avec l'EDI plante toujours !
A part ça et ta très grande expérience, comme on devine que c'est ces deux bibliothèques qu'il manque ?
remerci pour ta précieuse aide !
A+
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Non, je n'ai pas utilisé la ligne de commande, mais l'IDE.
Je suis parti d'un petit projet de test comprenant une frame "vide". Je me suis d'abord assuré que ce projet était compilable avec la lib "Debug, Unicode, Static, Monolithic". Ensuite, j'y ait ajouté un bouton et dans la fonction appelée par le click sur ce bouton, j'ai mis le code du fichier "tutorial1.cpp".
Berti:Parce que moi, après avoir rajouté ces deux libs aux dépendances supplémentaires, la compilation avec l'EDI plante toujours ! Tu obtiens quoi comme erreurs ?
Pour ma part, j'ai eut d'autres erreurs relatives à deux libs manquantes : "wxpngd.lib" et "wxzlibd.lib".
Berti:A part ça et ta très grande expérience, comme on devine que c'est ces deux bibliothèques qu'il manque ? Généralement, en décortiquant bien une erreur, tu peux facilement trouver sa solution. D'ailleurs, dans ton cas, les deux libs que j'ai donné dans mon 1er post, ainsi que les deux autres ci-dessus ne devraient pas résoudre l'erreur que tu as donné dans le premier post : symbole externe non résolu "public: class wxString __thiscall wxXmlNode::GetPropVal.....
Le "symbole externe non résolu" t'indique un problème de link (bibliothèque manquante généralement) Le reste de la ligne ("class wxString __thiscall wxXmlNode::GetPropVal") t'indique de quelle lib il s'agit (enfin, par déduction) : Dans ce cas, il ne trouve pas "wxXmlNode::GetPropVal", c'est donc qu'il manque la lib "wxXml". Le problème, c'est que dans le cas de la configuration "Debug, Unicode, Static, Monolithic", cette lib est normalement incluse à la lib monolithique (sauf si tu as désactivé la partie xml en compilant tes libs).
Peut-être qu'en analysant les autres erreurs que tu obtiens...
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Berti (Membre)
Inscrit le : 19-08-2012
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne |
L'ajout des deux premières libs m'a fait passer de 56 erreurs à 52 ! Les deux dernières m'ont permis d'arriver à 21 erreurs (+ quelques warnings).
Xaviou:Je suis parti d'un petit projet de test comprenant une frame "vide". Je me suis d'abord assuré que ce projet était compilable avec la lib "Debug, Unicode, Static, Monolithic". Ensuite, j'y ai ajouté un bouton et dans la fonction appelée par le click sur ce bouton, j'ai mis le code du fichier "tutorial1.cpp". C'est plus ou moins ce que j'ai fait. J'ai utilisé l'exemple minimal de wxWidgets et ai rajouté le code de tutorial1.cpp qui plantait lorsque je faisais la première instanciation "wxPdfDocument pdf".
Lors de l'ajout de "wxpngd.lib" et "wxzlibd.lib" la première erreur signalée est :
Code:wxcode_msw28ud_pdfdoc.lib(pdffontdatatype1.obj) : error LNK2001: symbole externe non résolu "public: class wxString __thiscall wxXmlNode::GetPropVal(class wxString const &,class wxString const &)const " (?GetPropVal@wxXmlNode@@QBE?AVwxString@@ABV2@0@Z)
Je n'ai pas souvenir d'avoir désactivé une seule option lors de la compilation des libs...
PS : 2 erreurs de moins avec wxbase28d_xml.lib !
Dernière modification par Berti (22-08-2012 23:25:09)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Je sais qu'avec MinGW, l'ordre des libs a une importance, mais avec Visual C++, ça n'a pas l'air d'être le cas (je viens de faire quelques tests pour vérifier).
Voici la liste des libs telle qu'elle apparaît dans la boite de configuration :
Code:wxcode_msw28ud_pdfdoc.lib wxmsw28ud.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib comctl32.lib rpcrt4.lib winmm.lib wsock32.lib version.lib et pour la partie "Valeurs héritées" :
Code:kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
Sinon, je peux éventuellement te passer le petit projet si ça te dit.
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Berti (Membre)
Inscrit le : 19-08-2012
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne |
Je n'avais pas ajouté les libs suivantes : winmm.lib wsock32.lib version.lib
la lib wxbase28d_xml.lib que j'ai rajoutée enlève 2 erreurs et j'ai la lib wxmsw28ud_core.lib qui était nécessaire pour la compilation du projet minimal wxWidgets. A noter que cette dernière lib n'est pas générée avec la ligne de commande
Code:nmake -f makefile.vc CXXFLAGS=/Zc:wchar_t- WX_DEBUG=0 UNICODE=1 MONOLITHIC=1 SHARED=0 Je l'ai obtenue avec l'Edit et la compilation de la solution wx.
Si j'enlève wxmsw28ud_core.lib j'ai 173 erreurs. En ajoutant les 3 libs citées au début du post, je n'ai pas d'améliorations ...
Je veux bien essayer ton petit projet, c'est sympa. Merci !
PS : pour les valeurs héritées, j'ai exactement la même liste !
Dernière modification par Berti (22-08-2012 23:49:59)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Pour ce qui est de mon projet de test, tu peux l'obtenir avec ce lien.
Par contre, je ne sais pas si tu pourras l'ouvrir, car c'est du "VC++ 2010" et il me semble que tu es en 2008.
Berti:la lib wxbase28d_xml.lib que j'ai rajoutée enlève 2 erreurs et j'ai la lib wxmsw28ud_core.lib qui était nécessaire pour la compilation du projet minimal wxWidgets. A noter que cette dernière lib n'est pas générée avec la ligne de commande
Code:nmake -f makefile.vc CXXFLAGS=/Zc:wchar_t- WX_DEBUG=0 UNICODE=1 MONOLITHIC=1 SHARED=0 Je l'ai obtenue avec l'Edit et la compilation de la solution wx. Houlà : fais gaffe, tu es en train de mélanger plusieurs versions des libs wxWidgets, notamment, Monolithique et Multi-libs. Les libs "wxbase28d_xml.lib" et "wxmsw28ud_core.lib" sont des parties des libs "Multi-libs". Elles sont normalement déjà contenues dans le fichier "wxmsw28ud.lib".
Il y a donc un problème avec tes réglages. Peut-être qu'en fouinant dans le fichier "vcxproj" de l'archive dont je t'ai donné le lien....
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Berti (Membre)
Inscrit le : 19-08-2012
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne |
Merci beaucoup Xaviou, c'est super sympa !
Tu as raison, je suis en train de me mélanger les pinceaux... Je vais aller au lit et regarder tout ça tranquillement demain !
A+
Berti
PS : j'ai aussi visual c++ 2010, pas de problème !
Dernière modification par Berti (23-08-2012 00:21:04)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Tu as tout à fait raison : la nuit porte conseil.
Je n'arrivais plus à me rappeler la différence au niveau config d'un fichier projet pour les libs Monolithiques et Multi-Libs.
Et ce matin, j'ai trouvé la solution : générer deux projets grâce à l'outil présent sur ce site, et comparer les deux fichiers obtenus.
Et le résultat est tout simple : - Pour la version Monolithique : la lib principale wxWidgets est ajoutée directement dans la liste des libs additionnelles du linker, et le fichier "setup.h" présent dans un sous-dossier des libs est ajouté à la liste des include forcés. - Pour la version Multi-libs : les libs wxWidgets ne sont pas ajoutées à la liste des libs additionnelles du linker, et c'est le fichier "setup.h" qui cette fois se trouve dans le dossier "$(WXWIN)/include/msvc/wx/" qui fait partie des includes forcés. Les libs sont elles ajoutées directement depuis ce fichier grâce à la commande "pragma".
Voilà : j'espère que ça va te permettre de régler ton/tes problèmes.
Si tu veux vraiment avoir les deux versions des libs (monolithiques et multi-libs), je te conseille d'utiliser le paramètre "CFG" au moment de la compilation, ce qui te permettra de séparer les deux versions pour éviter tout conflit. Pour faire simple, la valeur que tu donnes pour CFG sera ajoutée au nom du dossier des libs. Par exemple, pour wxWidgets-2.9.4, je compile les versions 32 et 64 bits. Le problème, c'est que les libs ont le même nom, il faut donc que je les sépare. J'utilise donc la valeur "CFG=32" ou "CFG=64", et mes libs se retrouvent dans deux dossiers différents (par exemple, vc_dll32 et vc_dll64). Donc, dans ton cas, tu peux sans problème utiliser "CFG=_Mono" et "CFG=_Multi" pour obtenir les deux dossiers "vc_lib_Mono" et "vc_lib_Multi" (enfin, ce n'est qu'un exemple).
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Berti (Membre)
Inscrit le : 19-08-2012
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne |
Merci pour les infos !!!
Aujourd'hui, tabula rasa ! J'ai tout effacé et recompilé avec visual c++2008 les bibliothèques wxWidgets et wxpdfdoc en ligne de commandes avec les mêmes options pour assurer la compatibilité. Pour wxWidgets :
Code:nmake -f makefile.vc CXXFLAGS=/Zc:wchar_t- BUILD=debug UNICODE=1 MONOLITHIC=1 SHARED=0 Pour wxpdfdoc :
Code:nmake -f makefile.vc CXXFLAGS=/Zc:wchar_t- WX_DEBUG=1 WX_SHARED=0 WX_UNICODE=1 WX_MONOLITHIC=1 SHARED=0 A noter qu'à l'aide de l'EDI de visual c++ 2008, je n'ai trouvé aucune combinaison des options en mode DEBUG ( liste déroulante : * * debug win 32 unicode) qui me donne la lib wxmsw28ud.lib!!!
Bref, j'ai ensuite utilisé ton outil pour générer un projet wxWidgets sous visual c++ 2008. C'est très utile, merci beaucoup ! A part 2 warnings :
Code:cl : Ligne de commande warning D9035 : l'option 'Wp64' est désapprouvée et sera supprimée dans une version ultérieure
Code:LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRTD' et les autres bibliothèques ; utilisez /NODEFAULTLIB:library tout semble fonctionner correctement !
En testant le tutorial1 de wxpdfdoc, j'ai dû rajouter la lib wxcode_msw28ud_pdfdoc.lib et les quatre libs que tu avais mentionnées dans les posts précédents : wxregexud.lib wxexpatd.lib wxpngd.lib wxzlibd.lib
Et cette fois-ci... ô merveille, tout fonctionne !!!!!!!!!!!!
je vais donc passer à l'étape suivante qui consiste à utiliser la lib wxwidget et la lib Qt (que j'utilise déjà dans plusieurs projets) dans un même projet !
MILLE MERCIS Xaviou pour tes conseils et infos toujours très avisés.
A+
Berti
Dernière modification par Berti (23-08-2012 22:55:17)
|
|
|