2010-01-26 5 views
1

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?

+1

Je dois demander - pourquoi ne pas simplement compiler dans VS2005? –

+0

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

Répondre

0

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?

+0

J'ai besoin de forcer le répertoire dans les propriétés quelque part. Le #include est dans le code API pas le mien donc je ne peux pas jouer avec ça. –

+0

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. –

0

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 .

0

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

0

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!

Questions connexes