Erreur de lien après la mise à jour de VS2008 à VS2010
Aujourd'hui, j'ai rencontré un problème de liaison après la mise à jour de la VS la version de 2008 à 2010, l'erreur est quelque chose comme ceci:
error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::assign(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned int,unsigned int)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z)
error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) referenced in function "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)" (?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z)
J'ai googlé ce problème sur le web, et a trouvé un poste similaire à cette adresse : http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/5ac28a31-3339-4db1-90f4-68edad360309
Mais aucune de ces réponses peut résoudre mon problème. Quelqu'un pourrait-il me donner quelques conseils sur la façon de résoudre ce problème?
Merci beaucoup pour l'aide!
source d'informationauteur Caihua
Vous devez vous connecter pour publier un commentaire.
Le problème est plus probable que l'une des bibliothèques votre .exe est un lien contre a été construit avec une version antérieure de Visual Studio. Parce que cet "autre" de la bibliothèque a été compilé avec une version précédente de VS, il est à la recherche pour les versions précédentes des fonctions _XRan et _XLen dans le VS2010 C runtime. MS a changé (encore une fois) et ils vieux signatures de fonction n'existe pas dans la VS2010 de l'exécution.
vieux: public: static void __cdecl std::_String_base::_Xran(void)
nouveau: public: void __thiscall std::basic_string::_Xran(void) (ce qui peut être erroné, mais vous voyez l'idée)
Il y a trois solutions possibles:
1) Compiler toutes les bibliothèques avec VS 2010
2) Utiliser l'ancienne version de VS pour compiler votre code
3) de Réécriture de l'existant _XRan et _XLen implemenations et remplacer dans l'éditeur de liens (voir JN123 de l'explication dans http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/5ac28a31-3339-4db1-90f4-68edad360309).
Goto les paramètres de votre projet:
Propriétés de Configuration
Général - Plate-forme de l'outil
Face d'un même problème de la migration pour la période 2008 à 2012. Il semble que MS continue de jouer avec ces fonctions de signatures. Ma décision est juste pour donner de l'éditeur de liens ce qu'il veut. Je l'ai placé à côté de code dans mon projet du rpc et de l'éditeur de liens a été fermé en haut:
Ce besoin de toutes ces versions de visual studio installé sur votre système. Sinon vous obtiendrez un message d'erreur comme ceci:
"Plate-forme spécifiée ensemble d'outils (v90) nécessite Visual Studio 2008. Assurez-vous que Visual Studio 2008 est installé sur la machine."