Как сделать проект C ++ в VS2008, ссылающийся на каталог include из VS2005? - PullRequest
1 голос
/ 26 января 2010

У меня есть проект c ++ и c # в Visual Studio 2008. В проекте c ++ используется API, созданный в VS2005. Мне нужен этот проект c ++ для ссылки на стандартные файлы библиотеки из VS2005. Порядок, в котором компилятор ищет каталоги включения, продолжает указывать на файлы включения из VS2008, в частности векторный файл. Программа аварийно завершает работу при запуске в Release, когда ссылается на векторный файл из VS2008. Как заставить проект c ++ использовать каталоги include из VS2005?

Ответы [ 4 ]

0 голосов
/ 22 сентября 2010

Если программа аварийно завершает работу в сборке релиза, возможно, проблема в вашем коде, а не в коде библиотеки, и возврат к VS2005 просто застревает в песке. Более того, проблема, скорее всего, связана с генерацией кода компилятора, а не с библиотекой компилятора, поэтому использование гибридных VS2010 и VS2005 может не решить проблему, и я бы сказал, что это может привести к гораздо большим проблемам. Оптимизация часто нарушает код, основанный на неопределенном поведении, поскольку компилятор может правомерно вести себя по-другому. Вы должны исправить свой код.

Возможно, лучшим быстрым решением проблемы использования старой библиотеки является применение выборочной оптимизации: отключите оптимизацию специально для модуля, который создает проблему. Это также поможет локализовать проблему, и без установленной оптимизации этот модуль будет легче отлаживаться в отладчике.

Также недостаточно просто ссылаться на другой заголовочный файл; вам также нужно будет связать библиотеку VC2005; в противном случае библиотека и заголовок могут не совпадать. Короче говоря, не используйте «решение», которое является более сложным и подвержено ошибкам, чем исходная проблема!

0 голосов
/ 26 января 2010

Если вы хотите использовать заголовки VS2005, вы действительно должны создать с VS2005. Вы можете заставить вещи работать, поигравшись с путем включения файла, но я ожидаю много головной боли. Я уверен, что это не поддерживается, и если заголовки хотят извлечь что-либо из библиотеки CRT (то есть, то, что вы используете, оказывается не только для заголовков), это, вероятно, будет работать не очень хорошо, если вообще .

0 голосов
/ 26 января 2010

Вот две альтернативы, которые вы можете попробовать.

Сначала , переименуйте версию VS2005 с <vector> на <vector_vs8>. Добавьте включаемый путь к этому каталогу и измените

#include <vector>

... до

#include "vector_vs8"

Второй , измените некоторые настройки проекта, чтобы использовать ТОЛЬКО VS8 включает, а не VS9 включает:

Проект> Настройки> Свойства конфигурации> C / C ++> Общие> Дополнительные каталоги включения, заданные для указания на каталоги включения для VS2005. Это будет включать ВСЕ файлы vs2005, а не только <vector>

* Проект> Настройки> Свойства конфигурации> C / C ++> Препроцессор> * Игнорировать стандартный путь включения , установленный в ИСТИНА

0 голосов
/ 26 января 2010

Это полный взлом, но вы можете явно включить конкретную реализацию вектора, заменив:

#include <vector>

... на:

#include "C:\Program Files (x86)\Microsoft Visual Studio 8.0\VC\include"

Но есливам нужен ваш проект VS2008, чтобы использовать более старую версию STL, тогда я чувствую нечто довольно плохое.Возможно, ваши библиотеки DLL не отделяют интерфейс от реализации ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...