Как мне обновить мой проект на С++ в 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?