Question

Est-il correct de lier une bibliothèque statique (.lib) compilée avec VS 2005 avec un programme compilé avec VS 2008 ?La bibliothèque et mon programme sont écrits en C++.Ce programme est exécuté sur l'émulateur Windows Mobile 6 Professionnel.

Cela semble fonctionner, il n'y a aucune erreur de liaison.Cependant, le programme plante au démarrage car des choses étranges se produisent dans la bibliothèque liée.Par exemple.lib peut renvoyer un vecteur de caractères avec une taille de grand nombre négatif.

Il n'y a pas de tels problèmes lorsque le programme est compilé avec VS 2005.

Ce qui est encore plus étrange, c'est que le problème concerne uniquement l'utilisation de la configuration de la version pour la construction.Lors de la compilation à l'aide de la configuration de débogage, le problème ne se produit pas.

Était-ce utile?

La solution

VS2005 et VS2008 utilisent différentes implémentations STL.Lorsque le code VS2005 renvoie un vecteur, l'objet a une disposition de mémoire différente de celle attendue par VS2008.Cela devrait être la raison des valeurs cassées que vous voyez dans la date renvoyée.

En règle générale, vous devez toujours compiler tous les modules C++ d'un projet avec le même compilateur et tous les paramètres/#defines sont égaux.

Un #define particulier qui provoque un comportement similaire est le #define SECURE_SCL de VS2008.Deux modules compilés avec des paramètres différents créeront exactement vos problèmes, car #defining SECURE_SCL introduit davantage de variables membres dans diverses classes de bibliothèque C++.

Autres conseils

Il n'est pas incorrect de créer un lien vers une bibliothèque plus ancienne de la manière que vous décrivez, mais cela ne me surprend pas que vous constatiez un comportement étrange.Contrôles de santé en couple :

  • Les deux fichiers utilisent-ils le mêmes versions de la mêmes bibliothèques d'exécution?
  • Votre application .EXE "voit" les mêmes fichiers d'en-tête avec lesquels le .LIB a été construit ?Assurez-vous que les macros _WIN32_WINNT (etc.) sont déclaré correctement.

Et quand vous dites .LIB, voulez-vous dire une véritable bibliothèque statique (mylib.lib) ou une bibliothèque d'importation pour une DLL (mylib.lib -> mylib.dll) ?

Et quels sont les paramètres de compilation/lien pour votre projet exécutable VS2008 ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top