J'ai un projet C++ et un projet C# dans Visual Studio 2008. Le projet C++ utilise une API qui a été construite dans VS2005. J'ai besoin de ce projet C++ pour référencer les fichiers de bibliothèque standard de VS2005. L'ordre dans lequel le compilateur recherche les répertoires include continue de pointer vers les fichiers d'inclusion de VS2008, en particulier le fichier vectoriel. Il plante le programme lors de l'exécution dans Release lorsqu'il fait référence au fichier vectoriel VS2008. Comment puis-je forcer le projet C++ à utiliser les répertoires include de VS2005?Comment créer un projet C++ dans VS2008 en référence au répertoire include de VS2005?
Répondre
Ceci est un hack total, mais vous pourriez être en mesure d'inclure explicitement une implémentation spécifique du vecteur en remplaçant:
#include <vector>
... avec:
#include "C:\Program Files (x86)\Microsoft Visual Studio 8.0\VC\include"
Mais si vous avez besoin de votre VS2008 projet d'utiliser une version plus ancienne de la STL, alors je sens quelque chose de très mauvais. Peut-être votre DLLs don't seperate the interface from the implementation?
J'ai besoin de forcer le répertoire dans les propriétés quelque part. Le #include
Si le code API que vous mentionnez comporte des éléments STL dans les classes publiques, l'API que vous utilisez est rompue. La chose la plus facile à faire dans ce cas est juste d'utiliser VS2005. –
Si vous voulez utiliser les en-têtes VS2005, vous devriez vraiment construire avec VS2005. Vous pourriez obtenir des choses à travailler en tripotant avec le chemin du fichier include, mais je m'attendrais à beaucoup de maux de tête. Je suis sûr que ce n'est pas supporté, et si les en-têtes veulent tirer quelque chose de la bibliothèque CRT (c.-à-d., Ce que vous utilisez ne se trouve pas uniquement en-tête) ça ne marchera probablement pas très bien .
Voici deux alternatives que vous pouvez essayer.
D'abord,, renommez la version VS2005 de <vector>
en <vector_vs8>
. Ajouter un chemin d'inclusion dans ce répertoire, et changer
#include <vector>
... à
#include "vector_vs8"
Deuxième, modifier certains paramètres du projet autour d'utiliser SEULEMENT VS8 comprend plutôt que VS9 comprend:
Projet> Paramètres> Propriétés de configuration> C/C++> Général> Inclure les répertoires supplémentaires définis pour pointer vers les répertoires d'inclusion pour VS2005. Cela inclut tous les fichiers VS2005, non seulement <vector>
* Projet> Paramètres> Propriétés de configuration> C/C++> préprocesseur>* Ignorer standard Inclure chemin ensemble à TRUE
Si le programme se bloque dans un version build, le problème est probablement avec votre code plutôt que le code de la bibliothèque, et revenant à VS2005 est juste la tête dans le sable. De plus, le problème est probablement dû à la génération du code du compilateur plutôt qu'à la bibliothèque du compilateur, donc l'utilisation d'un hybride VS2010 et VS2005 peut ne pas résoudre le problème, et je dirais qu'il est susceptible d'introduire des problèmes beaucoup plus importants. L'optimisation brise souvent le code qui repose sur un comportement indéfini, puisque le compilateur peut légitimement se comporter différemment. Vous devriez corriger votre code.
Peut-être une meilleure solution rapide que l'utilisation d'une ancienne bibliothèque est d'appliquer une optimisation sélective: désactiver l'optimisation spécifiquement sur le module qui vous pose le problème. Cela aidera également à isoler le problème, et sans ensemble d'optimisation, ce module peut être plus facilement débogué dans le débogueur.
La simple référence à un fichier d'en-tête différent est probablement insuffisante; Vous devrez également lier la bibliothèque VC2005. sinon, la bibliothèque et l'en-tête peuvent ne pas correspondre. En bref, n'utilisez pas une «solution» plus complexe et sujette aux erreurs que le problème original!
- 1. PHP include dans un include (répertoire différent)
- 2. Comment créer un fichier dans un répertoire différent en C++?
- 3. C# Récupérer la référence des ressources de projet (VS2008)
- 4. C# - classe partielle dans le projet VS2005
- 5. Assertion dans VS2008 mais pas dans VS2005
- 6. Comment créer un répertoire temporaire en C++?
- 7. Comment lier un fichier .lib dans Visual C++ 2010? Sans faire référence au projet?
- 8. Comment appeler un projet de dans un autre dans VS2005
- 9. Lors de l'ajout d'une référence dans un projet de formulaire C# VS2008, Visual Studio copie-t-il l'assembly référencé
- 10. Comment nommer un assembly C++ dans VS2008?
- 11. Projet C#: Comment ajouter un exécutable au projet?
- 12. Comment lier un projet VS2008 C++ en tant que DLL au lieu d'un LIB?
- 13. Conversion de projet VS2008 en VS2010
- 14. Comment créer un addin pour VS2005.?
- 15. Masquage de tous les messages 'Skipped Build' dans VS2005/VS2008
- 16. Définir le répertoire #include du fichier de code C++
- 17. Projet d'installation VS2008 pour le projet C#
- 18. Impossible d'ajouter la référence de fichier dll au projet F # dans VS2008
- 19. VS2008 C++ - afxglobals.h: Aucun fichier ou répertoire de ce type
- 20. Cant ajouter le service Web sécurisé comme référence au projet VS2005
- 21. Erreur de connexion Firebird après la conversion du projet de VS2005 en VS2008
- 22. Ajouter une référence d'assembly dans un projet de site Web (VS2005) et la stocker dans subversion
- 23. Bibliothèques C++ non gérées - différences entre VS2005 et VS2008?
- 24. Projet de configuration VS2008
- 25. Eclipse CDT - Créer un sous-répertoire dans un projet
- 26. C++ Undefined Référence (Même avec Include)
- 27. Comment utiliser Microsoft.Build.BuildEngine pour créer un projet Silverlight?
- 28. VS2005 WebSite Problème de projet
- 29. Comment exporter les polices et couleurs de VS2008 à VS2005?
- 30. Est-il possible de référencer un projet de site Web VS2005 à partir d'un autre projet dans la même solution?
Je dois demander - pourquoi ne pas simplement compiler dans VS2005? –
Vous feriez mieux ici de vous demander pourquoi votre code échoue plutôt que d'implémenter une solution mal avisée et défectueuse. Aussi quelle est la pertinence de votre projet C# à cette question? – Clifford