[wxWindows] ça link pas

ça link pas [wxWindows] - C++ - Programmation

Marsh Posté le 20-01-2005 à 16:33:31    

Salut à tous :),
 
Voilà, j'ai commencé un projet en wxWindows et ça link pas... :(
Voici le message d'erreur que j'obtiens:
--------------------------------------------------------
Édition des liens en cours...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) déjà défini(e) dans msvcprtd.lib(newop_s.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) déjà défini(e) dans MSVCRTD.lib(MSVCR71D.dll)
nafxcwd.lib(appcore.obj) : error LNK2001: symbole externe non résolu ___argv
nafxcwd.lib(appcore.obj) : error LNK2001: symbole externe non résolu ___argc
nafxcwd.lib(apphelp.obj) : error LNK2001: symbole externe non résolu __mbctype
nafxcwd.lib(filelist.obj) : error LNK2001: symbole externe non résolu __mbctype
nafxcwd.lib(viewedit.obj) : error LNK2019: symbole externe non résolu __mbctype référencé dans la fonction "protected: long __thiscall CEditView::OnFindReplaceCmd(unsigned int,long)" (?OnFindReplaceCmd@CEditView@@IAEJIJ@Z)
.\Debug/Tbl2T13wx.exe : fatal error LNK1120: 3 externes non résolus

-----------------------------------------------------
 
De quel côté dois-je chercher pour solutioner ces erreurs?
( :( fin de journée, j'en ai marre:(...j'devrais arrêter et relire le tout demain...d'un aut'côté j'passerais une meilleurs soirée si mon programme compile...enfin bon...:()
 
Un tout grand merci d'avance  ;) :)
 
A+


Message édité par BigBulle le 20-01-2005 à 16:38:48
Reply

Marsh Posté le 20-01-2005 à 16:33:31   

Reply

Marsh Posté le 20-01-2005 à 16:39:55    

Project - Properties
  C/C++
     Code Generation
        Run-time Library:  Multi-threaded DLL (pour la version release), ou Debug Multi-threaded DLL pour la version Debug.

Reply

Marsh Posté le 20-01-2005 à 16:46:38    

merci pour ta réponse éclaire ;)
 
J'ai bien activé cette option...
Je suis passé du VS6.0 au VS2003, dois-je recompiler toute les bibliothèque wxWindows?

Reply

Marsh Posté le 20-01-2005 à 20:58:37    

Il vaut mieux :)

Reply

Marsh Posté le 21-01-2005 à 09:00:37    

ça n'a rien changé :(
C'est normal/grave si y a WINVER not defined au début de la compilation?

Reply

Marsh Posté le 21-01-2005 à 09:08:04    

Euh, j'avais pas fait gaffe, mais c'est une lib des MFC qui pose problème. Tu t'en sers dans ton code ? Si c'est pas le cas, est-ce que l'option apparait dans les propriétés du projet ?

Reply

Marsh Posté le 21-01-2005 à 10:19:18    

Non j'ai désactivé les MFCs...
Par contre, j'ai défini des variables globales avec extern... je cherche dans cette direction pour l'instant.  
Ces variables sont des pointeurs vers des classes envoyant des exceptions. Ces exceptions sont faites maison et n'héritent d'aucune autre classe (donc pas de CException).D'autre part, certaines classes sont des classes template. Est-ce que ça pourrait poser des problèmes au niveau du linkage?
 
Mon problème c'est que je ne sais même pas à quoi servent afxmem.obj,newop_s.obj,appcore.obj,MSVCR71D.dll etc... j'suis perdu...
 
Un tout grand merci pour ton aide Lam's :)

Reply

Marsh Posté le 21-01-2005 à 10:24:38    

Je doute fortement que ce soit un problème avec tes exceptions. Ce que je vois, c'est vraiment qu'une DLL des MFC est utilisée. Vérifie à nouveau tes options de compil (y compris les options de compil que tu as utilisé pour compiler wxWidgets et ses sous-projets).  
 
Et vérifies qu'à aucun moment tu n'inclues de "afxXXX.h" (y compris dans ton stdafx.h/.cpp si tu en as un).

Reply

Marsh Posté le 21-01-2005 à 10:54:39    

J'ai enlever toutes références à mes variables globales et maintenant ça compile...
 
Pour créer ces variables, j'ai créé un fichier globalvar.h dans lequel je les déclare toutes précédées de extern. J'inclue alors ce fichier dans tous les autres fichiers qui utilisent ces variables globales. Ensuite j'ai créé un fichier globalvar.cpp dans lequel j'instancie ces variables.
 
Y a t-il une énormité dans ma démarche?
 
Au moment de compiler le fichier globalvar.cpp il me met WINVER not defined. Defaulting to 0x0501 et uniquement pour celui-la... bizarre...

Reply

Marsh Posté le 21-01-2005 à 11:12:55    

Ok...j'ai trouvé...
A force de changer mes fichiers de place, le répertoire du projet ne contenait plus de stdafx.h et stdafx.cpp.
Le compilo allait alors les chercher dans un autre project... Ceci créait apparement l'erreur citée plus haut...
 
Un tout grand merci pour ton aide Lam's :)!!!
 
Au fait, à quoi servent exactement ces deux fichiers?
 

Reply

Marsh Posté le 21-01-2005 à 11:12:55   

Reply

Marsh Posté le 21-01-2005 à 11:25:09    

Pre-compiled headers.  
 
Tu inclues dans stdafx.h tous les "gros" header files qui changent rarement, et VC++ les pré-compileras (typiquement, tu y mets <string> et <vector>, ainsi que "wx/wx.h" ou "wx/wxall.h" ). De telle sorte que la compilation de tes fichiers sera beaucoup plus rapide.  
 
stdafx.cpp sert à contenir tout le code généré par ça...
 
En contrepartie, il te faut inclure stdafx.h en premier dans *tes fichiers cpp qui sont marqués comme utilisant les pre-compiled headers (ce qui est le cas par défaut pour tous les fichiers).
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed