Вопрос

Я знаю, что есть несколько похожих вопросов, но я не думаю, что у них действительно такие же требования, как у меня.

Наша DLL скомпилирована с помощью Visual Studio 2005 и должен ссылка на конкретную версию CRT из-за ограничений при установке.Это абсолютно, перекомпиляция его с последней версией не является решением.

Недавно мы обновили наши библиотеки Boost.Однако, когда я создал Boost, он автоматически использовал последнюю версию CRT.Теперь, когда я связываю Boost с нашей программой, это создает зависимость как от самой новой (неправильной) версии CRT, так и от старой (правильной) версии CRT.Зависимость от новейшей версии должна быть устранена.

Каково наилучшее решение этой проблемы?На данный момент лучшее, что я могу придумать, - это перестроить Boost с использованием старой версии, но я понятия не имею, как легко это сделать, не изменяя исходный код.

Если бы существовал способ заставить Visual Studio использовать определенную версию CRT глобально (не для каждого проекта), это было бы здорово.Или способ просто удалить последнюю версию CRT, но я почти уверен, что это невозможно, поскольку я думаю, что это считается частью операционной системы.

Это было полезно?

Решение 2

Решением было вручную изменить встроенный манифест, чтобы удалить зависимость от новейшего CRT, поскольку он построен с динамически связанным CRT.Однако я сомневаюсь в безопасности этого.

По какой-то причине принудительное включение файла targetsxs во время процесса сборки Boost не заставило его настроить таргетинг на указанный CRT.

Другие советы

AFAIK, не рекомендуется использовать разные версии CRT.В отличие от .NET, где вы можете ссылаться на библиотеку DLL .NET 1.1 из библиотеки DLL .NET 2.0, Unmanaged не обеспечивает такой гибкости.

Поскольку вы не можете обновить свои библиотеки DLL для использования более нового CRT, единственное, что вы можете сделать, это перестроить Boost в VS2005.

Также не рекомендуется связывать две библиотеки dll с разными CRT.Это может привести к таким проблемам, как повреждение памяти.

Примечание:Каждая Visual Studio имеет свою версию CRT по умолчанию, на которую ссылаются все библиотеки dll.

Также я не понял "удалить новый ЭЛТ".Вам нужно будет установить повторный список Visual Studio для каждой используемой вами версии Visual Studio.(Этот повторный список содержит CRT dll) http://msdn.microsoft.com/en-us/library/abx4dbyh%28VS.80%29.aspx

Вы должны точно найти, какая конструкция в проекте boost вводит зависимость от неправильного CRT и удалить / изменить эту конструкцию.Это может быть что-то в файле .vcproj, или какой-то манифест, или что-то в этом роде.

VC ++ 2005 и VC ++ 2008 CRT содержат более или менее одинаковые примитивы - вы, вероятно, можете полностью перекомпилировать boost с помощью VC ++ 2005 или немного подправить его и перекомпилировать после этого.Да, это потребует определенных усилий, но это единственный выход - и ваш код, и код boost должны быть скомпилированы в соответствии с версией CRT, которую вы хотите использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top