Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur de type LNK 2005 [ Divers / Général ] (BenGourion73)

lundi 18 août 2008 à 15:56:44 | Erreur de type LNK 2005

BenGourion73

Bonjour,

J'ai une solution en développement qui se compose d'une librairie statique et d'un exécutable. La librairie statique compile bien toute seule. Quand l'exécutable est compilé, pas d'erreur jusqu'à l'étape d'éditions des liens où plusieurs message du type suivant apparaissent :

msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) déjà défini(e) dans libelementaire.lib(C_Calendar.obj)

et surtout :

nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) déjà défini(e) dans MSVCRTD.lib(MSVCR80D.dll)



Le compilateur indique donc que plusieurs symboles serait définis plusieurs fois dans le programme mais comme pour certains, il s'agit de symboles génériques type operator new ou delete, je pense que l'erreur provient soit  :

- d'un problème de config de projets ;
- d'un include multiple d'un même fichier de base stdafx.h ou autre.

Pour ce qui est de savoir si ça vient d'un pb de config de projets, j'ai essayé de reproduire le pb en montant un projet identique (mais pas avec les mêmes fichiers sources) mais là pas d'erreur ce qui me laisse penser que l'erreur ne vient pas de là mais si cette expérience me semble insuffisante pour éliminer totalement cette hypothèse...

Alors qui a une idée ?





lundi 18 août 2008 à 17:33:17 | Re : Erreur de type LNK 2005

BenGourion73

Je viens de m'apercevoir que le projet chargé de générer le .lib de la librairie statique générait à la place un .obj. Comme par ailleurs, j'ai dans ce projet un fichier source portant le nom du projet. Du coup, peut-être que Visual C++ n'aime pas que le .lib porte le même nom qu'un fichier source...

mardi 19 août 2008 à 18:06:16 | Re : Erreur de type LNK 2005

Lucky92

Dans les propriétés de projet , à la section génération de code, il y a une option Bibliothèque Runtime.
Il faut que tu compiles la librairie et l'application avec la même option de compilation.



mardi 19 août 2008 à 18:55:13 | Re : Erreur de type LNK 2005

BenGourion73

Merci,

J'ai déjà vérifié que l'exe et le .lib ont bien la même bibliothèque de runtime. Par contre, je pense que mon erreur vient du fait que dans la librairie, j'ai des math.h et string.h propres différents de ceux de la librairie C++ standard... Je suis en train de voir de quoi il retourne...


mardi 19 août 2008 à 23:21:36 | Re : Erreur de type LNK 2005

Lucky92

En c++, utilises de préférence

#include<string>
#include<cmath>

au lieu de

#include<string.h>
#include<math.h>

Sinon, vérifie également que tu n'as pas une option /clr (code managé) en trop ( ou en moins )...



mercredi 20 août 2008 à 19:00:06 | Re : Erreur de type LNK 2005

BenGourion73

C'est bon, j'ai trouvé. Bon pour que d'autres développeurs ne rament pas avec cette saloperie d'erreur de LINK 2005, voici comment repérer la source du problème :
1/ Mettez l'option /VERBOSE:LIB dans l'Editeur de liens  ---- > ça permet d'avoir un retour sur les librairies recherchées par Visual Studio au moment de l'éditien des liens
2/ Mettez bien sur la même bibliothèque de RunTime dans tous les projets de votre solution mais ça ne suffit pas ...
3/ ...car il faut s'assurer que la liste des bibliothèques recherchées mise en évidence gràce au setting /VERBOSE:LIB du 1/ colle bien avec des librairies compatibles avec celle choisie pour le Runtime.
 
Pour utiliser cette bibliothèque runtime Ignorer ces bibliothèques

Un seul thread (libc.lib)

libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

Multithread (libcmt.lib)

libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

Multithread utilisant des DLL (msvcrt.lib)

libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

Un seul thread débogage (libcd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib

Multithread débogage (libcmtd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib

Multithread débogage utilisant des DLL (msvcrtd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib


Attention si mon erreur de LINK apparaissait c'est que Visual Studio ne respecte pas automatiquement pas les règles du tableau précédent. Ceci étant dit, deux solutions :

1/ Mettre dans C/C++ --- > Avancé --- >Omettre les noms de bibliothèque par défaut la valeur Oui (Zl)

Ou

2/
Spécifier dans Editeur de liens --- > Bibiothèque spécifique ignorée  avec pour chaque librairie XXX à ignorer la commande /NODEFAULTLIB:XXX, chaque instruction séparée d'un pt virgule.



Cette discussion est classé dans : basic, erreur, type, std, lib


Répondre à ce message

Sujets en rapport avec ce message

erreur link2001 [ par balbeau ] J'ai l'erreur souivante qui commence à "m'agacer"......Loading.obj : error LNK2001: symbole externe non résolu "class std::basic_ofstream > fout" (?fo 0xa0 <-erreur VC++ [ par Toobad ] Mon vc++6 arrete pas de me faire la guelle.il m'envoie une tonne d'erreur 0xa0 partout, sur toutes les API. Je crois que c'est à cause des include ou Linker Error [ par crocejf2000 ] J'essaye d'afficher mon fichier d'aide .chm avec la fonction HTMLHelp en incluant .Mais le linker me donne une erreur :Error: Unresolved external 'Htm ERREUR DE LIBCRAIRIE !!!!! [ par frysa ] Bonjour! Je prévois commencer à apprendre l'OpenGL. Bon j'ai installé glut.h et glut32.dll et glut32.lib dans rep: LIB mais quand je compile... [VS.NET] Une erreur de compilation incroyable! [ par Sunsawe ] Bonjour, excusez moi mais je ne savais pas comment titrer mon message autrement. Voilà là fameuse erreur qui se suffit à elle même: Mesfunc.cpp(72) : afficher un type string [ par GIRAFE ENRHUMEE ] Dans Visual C++, on m'affiche l'erreur que les flots >) ne sont pas surdéfinis pour recevoir une opérande droite de type string.Dans Dev C++, je n'ai probléme avec cin [ par ima81 ] bonjour mon probléme avec cin vient du fait qu'elle engendre erreur lors de la compilation quand elle ne reconnait pas un type enum que je declare problème avec une librairie [ par hrp ] Hello,je travaille avec Borland C++ Builder 6 et je tente d'utiliser les fonctions de librairie "WizPro.lib". A la compilation voici l'erreur:[Lieur E problem pour compiler ce truc <d3d8.h> [ par temoin ] TEMOIN Bonjour je voudrais compiler un prog de directx ca m'affiche cette erreur je tout ajouter les linkquelqu'un pourrait me dire ce quoi cette erre [VC++] erreur : std is not a class... ??? [ par elo29 ] Bonjour, Je code sous Visual C++ et il refuse le "using namespace std". L'erreur est la suivante : error C2653 : 'std' is not a class or a namespace


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.