2009-04-08 2 views
11

Я использую VS2008 для разработки COM-библиотеки dll, которая по умолчанию использует CRT-версию 9 , но я использую фреймворк службы TSF (Text service framework), который несовместим с новым CRT. Я думаю, что решение заключается в использовании совместимого, так как я могу указать версию CRT?Как заставить компилятор C++ использовать определенную версию CRT?

+0

См. Предыдущий ответ: http://stackoverflow.com/questions/693250/vs-2008-link-against-older-c-runtime –

ответ

10

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

Прежде всего убедитесь, что манифест не, сгенерированный при каждой сборке (на VS2005: свойства конфигурации/файл компоновщика/манифест/сгенерировать манифест), так как он заменит ваши изменения вручную. Также убедитесь, что эта изоляция включена. Затем найдите файл манифеста - должен быть в $ (IntDir) (например, Debug). Вы должны увидеть раздел, похожий на -

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 

(Для отладочных сборников, конечно). Вам нужно отредактировать атрибуты версии и publicKeyToken элемента CRT. Вы можете просмотреть файлы в локальной папке WINDOWS \ WinSxS, чтобы просмотреть доступные версии. Проверьте here, как извлечь publicKeyToken, как только найдете нужную версию. (Хотя я сначала попытаюсь посмотреть прямо в манифесты других проектов, привязавшись к вашей желаемой версии CRT).

Если вы туда поедете, ожидайте грубой воды. Возможно, вам повезло, если ваше приложение является консольным приложением, которое не связано с другими компонентами Side-by-Side (MFC, OpenMP и т. Д.). Если ваше приложение является нетривиальным, я был бы удивлен, если не будут какие-то замысловатые зависимости от версии, а не компоненты SxS.

(изменить) Вам также необходимо распространить с вашим приложением конкретный CRT, который вы используете. Вот someone кто это сделал.

2

Самый простой способ - создать свою DLL с версией VC++, которая использует CRT, совместимый с TFS.

Я не думаю, что это хорошая идея просто связать вашу DLL с другой версией CRT, если вы не используете ту же версию файлов заголовков. И самый простой способ сделать это будет использовать правильный VC++ версии ...

Если вы все еще хотите попробовать, вы можете:

  • перейдите в раздел «Конфигурация настройки-> Linker-> Вход- > Игнорировать определенную библиотеку "и введите crt, который вы используете (libc.lib, libcmt.lib и т. Д. См. Это code project article).
  • Введите имя версии crt, которую вы хотите использовать в «Конфигурационные параметры-> Linker-> Input-> Additional dependencies», и ее путь в «Настройки конфигурации -> Linker-> General-> Additional library directory».

Вы также можете попробовать изменить каталоги по умолчанию в «Инструменты-> Параметры-> Проекты и решения-> Каталоги VC++-> Файлы библиотек". Возможно, изменение $ (VCInstallDir) lib на путь, в котором находится ваша другая версия CRT, сделает трюк

0

Не пытайтесь использовать VS9 и ссылаться на другую версию CRT.

Если вам нужно ваше приложение для ссылки на другой CRT, скажем, CRT VS8, тогда вы должны скомпилировать & ссылку на свое приложение в этой версии VS.

+0

Какова точная причина, по которой вы не можете связаться с CRT по вашему выбору? Не могли бы вы уточнить? –

0

решение работал для меня с Visual Studio Express 2013 x64 + OpenCV 2.4.9 x64 компиляции отладки (я интегрирован, что в LV2013 x64), но он должен работать на любой другой VS-версии:

1) Щелкните правой кнопкой мыши свое решение> Свойства> Отладка исходных файлов ...

2) Возможно, потребуется два варианта (в зависимости от вашего каталога VS-install) ... C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ atlmfc C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ crt

С этим он будет работать для Visual Studio 2013 Express, но должен работать и для других 2013. Если у вас есть Visual Studio 10 или 11, просто введите «Microsoft Visual Studio 11.0» или 10.0 в каждом. Вы также можете просто добавить их.

Эти записи вы можете получить из своего OpenCV.sln в разделе «Решение»> «Свойства»> «Исходные файлы отладки» (как описано выше). И как уже было сказано: CRT должен соответствовать ... и это происходит в этом месте.

Смежные вопросы