Как мне обновить мой проект на С++ в Visual Studio 2015, чтобы использовать новый универсальный CRT?

После того как VS2015 обновил мой проект до нового инструментария платформы v140, он не смог построить из-за ошибки компоновщика: LNK1104 не может открыть файл libvcrt.lib.

Похоже, что эта библиотека была перемещена из-за нового универсального ЭЛТ, упомянутого в этой статье: http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspx?PageIndex=2.

В то время как в статье рассказывается, к чему мне сейчас нужно привязать, она не дает инструкций.

My Solution генерирует файлы .exe и .dll, которые он использует. Я не знаю, что делать с матрицей, описанной ниже.

Выполнить DLL (/MD): msvcrt.lib vcruntime.lib ucrt.lib

Релиз Static (/MT): libcmt.lib libvcruntime.lib libucrt.lib

Ответ 1

Когда вы конвертируете свой проект, вам нужно убедиться, что вы обновляете как включенные, так и настройки компоновщика, чтобы указать на новый CRT.

Для включения добавьте следующее:

$(UniversalCRT_IncludePath)

Для ссылки добавьте одно из следующего в зависимости от вашего целевого процессора:

$(UniversalCRT_LibraryPath_x86)
$(UniversalCRT_LibraryPath_x64)
$(UniversalCRT_LibraryPath_arm)

Ответ 2

Встроенная переменная $(LibraryPath) разрешает все пути библиотек, необходимые для создания приложения в Visual Studio, включая пути UCRT в VS 2015.

Примечание. Возможно, вы захотите также обновить путь включения, переносимая встроенная переменная: $(IncludePath).

Или еще лучше, если вам не нужна библиотека или включить настройку пути, следует использовать значения по умолчанию (выберите <inherit from parent or defaults>).

Примечание 2: вы можете настроить пути для нескольких проектов и нескольких целей одновременно, просто выберите несколько проектов, затем выберите "свойства".

Ответ 3

Я загрузил SDK 10.0.10586.0, который теперь содержит библиотеку libucrt.lib в C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x64. Но я не могу заставить компоновщика найти эту библиотеку; он использует 10240 (предыдущая установленная версия).

Макросы, упомянутые выше, $(LibraryPath) и $(UniversalCRT_LibraryPath_x64), оба относятся к C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64. Я не знаю, как изменить значения для этих макросов, которые, по-видимому, необходимы, чтобы заставить компоновщик использовать нужную библиотеку.

Обновление для Windows 7 Pro, 64-бит, Visual Studio 2015 1. Связывание статических библиотек, проекта С++ и Intel Fortran.

Ответ 4

По умолчанию, если вы скомпилируете свой проект с помощью vs2015, Universal CRT будет использоваться. (Ничего особенного не нужно делать)

Но если вы хотите статически связать (и избавиться от зависимости ucrt) - прочитайте эту статью:

Временные зависимости Visual Studio 2015 или как избавиться от Universal CRT?