L'éditeur de liens d'erreur: déjà défini
J'essaie de compiler mon projet Visual C++ (utilise les MFC) dans Microsoft Visual Studio 2012, il revient avec les erreurs suivantes:
error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)
error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj)
error LNK1169: one or more multiply defined symbols found
Donc je l'ai googlé un peu et trouvé cette page:
http://support.microsoft.com/?scid=kb%3Ben-us%3B148652&x=13&y=8
J'ai essayé la solution mais le "Ignorer les Bibliothèques" boîte n'existe pas, et ne fait donc l'Objet/bibliothèque de modules de la boîte. Pour les Bibliothèques Ignorer, j'ai trouvé Ignorer les bibliothèques spécifiques, mais en sautant l'étape cinq seulement m'17xx erreurs.
J'ai googlé autour d'un lot, mais revenait toujours à la même page, comment puis-je résoudre ce problème dans Visual Studio 2012?
- Êtes-vous reliant à l'encontre de toute non-système de bibliothèques, par exemple, coup de pouce?
- Je ne pense pas que je le suis. Tous jutilise est Kintect, MFC et Windows.
- Avez-vous essayé de changer la bibliothèque d'Exécution? par exemple, en C/C++->Génération de Code utilisant le Multi-thread DLL de Débogage (/MDd).
Vous devez vous connecter pour publier un commentaire.
La cause la plus probable de ce problème est d'avoir des versions différentes de la C runtime (multi - ou mono-thread, debug - ou non-de débogage) liée aux différentes parties du projet. Peut-être que votre exécutable principal dispose d'un moteur d'exécution liés, mais vous reliant à une bibliothèque construite avec un autre moment de l'exécution. Utilisation depends.exe pour vérifier chaque bibliothèque qui vous relie explicitement à son tour de trouver l'intrus.
J'ai résolu le problème: j'ai trouvé que c'est un problème avec la commande de l'inclut. Cependant obligeant chaque fichier pour avoir le afx.h include (propriétés->c/c++/avancé/force d'inclure le fichier)
correction d'un problème pour moi.
#pragma comment(linker, "/nodefaultlib:libc.lib")
#pragma comment(linker, "/nodefaultlib:libcd.lib")
Ok, j'ai résolu ce problème en combinant une .fichier c (unité de compilation) avec un projet MFC. L' .c fichier a le même nom (unité de compilation), qui fut, dans une bibliothèque, j'ai été le lien avec. J'ai changé le nom du fichier et l'éditeur de liens confusion s'en alla.
J'ai essayé les autres solutions ci-dessus n'a pas fonctionné.
J'ai trouvé aussi que si vous utilisez LTGC (lien-temps de génération de code) et vous venez d'ajouter une implémentation personnalisée pour
operator new
ou quelque autre symbole qui existe dans le CRT, alors vous devriez faire un reconstruction complète, ce n'est qu'à l'augmentation de l'éditeur de liens omettre "références faibles". Cela est vrai même dans VS 2015.Étiez-vous avoir ce problème avec Visual Studio 2008 ou 2010?
Je vois un échec similaire dans Visual Studio 2012: code lié amende dans les versions antérieures de la suite d'outils est maintenant de donner plusieurs instances de
error LNK2005: "void * __cdecl operator new(unsigned __int64,void *)" (??2@YAPEAX_KPEAX@Z) already defined
. Contrairement à vous, nous ne sommes pas à l'aide de MFC.Ce n'est pas une solution à votre problème, bien sûr, mais elle peut pointer vers une régression bogue dans Microsoft compilateur ou l'éditeur de liens le développement. Si vous pouvez vérifier que le même code fonctionne très bien dans VS2010, qui aurait tendance à confirmer mon diagnostic.
(Pour le vérifier, il suffit de définir les Propriétés de Projet > Propriétés de Configuration > Général > Plate-forme d'Outils de "v110" à "v100" pour tous les projets dans votre solution, et Tout Reconstruire. En supposant que vous avez VS2010 installé sur la même machine, vous pouvez faire tout cela sans quitter VS2012.)
MODIFIÉES afin D'AJOUTER: Cette erreur a été signalée à Microsoft comme bug #768788.