Как статически связать созданный VCPKG файл .lib в Visual Studio

Я использую VCPKG для создания сторонних библиотек, например, libcurl. У меня есть динамические и статические сборки. Очевидно, файлы import .lib и object .lib содержатся в двух разных папках: x64-windows и x64-windows-static соответственно. Я хочу связать объект libcurl.lib статически с моей программой, но не могу понять, как настроить Visual Studio для этого. Он всегда заканчивается использованием библиотеки импорта, а не библиотеки объекта, и, таким образом, моя программа требует libcurl.dll при выполнении.

Я настроил основной проект на использование библиотеки времени выполнения / MT. Я попытался настроить компоновщик для использования папки дополнительных библиотек, указывающей на папку static lib и дополнительные зависимости. Я даже пробовал использовать полный путь к файлу libcurl.lib объекта в дополнительных зависимостях компоновщика.

Когда я использую переключатель / MT для библиотек времени выполнения, я могу сказать с помощью Dependency Walker, что все обычные библиотеки, такие как vcruntime, интегрированы в исполняемый файл, а не загружаются как библиотеки DLL, но libucurl.dll все еще существует, загружается динамически.

Похоже, что из-за автоматической интеграции пути включения VCPKG Visual Studio всегда сначала находит и использует импорт libcurl.lib, даже если я указываю полный путь к объекту libcurl.lib во входных данных компоновщика.

Как настроить Visual Studio для статической привязки правильного файла .lib?


person Alex1844    schedule 22.10.2019    source источник


Ответы (1)


Хорошо, я нашел решение для всех, у кого может быть такая же проблема.

По умолчанию Visual Studio использует x64-windows или x86-windows "триплет"

Вы можете увидеть автоматически выведенный триплет, установив уровень детализации MSBuild на Нормальный или выше:

Ярлык: Ctrl + Q «построить и запустить»

Инструменты -> Параметры -> Проекты и решения -> Сборка и запуск -> Подробность вывода сборки проекта MSBuild

Чтобы переопределить автоматически выбранный триплет и использовать x64-windows-static или x86-windows-static, вы можете указать свойство MSBuild VcpkgTriplet в своем .vcxproj, добавив его в группу свойств Globals.

<PropertyGroup Label="Globals">
  <!-- .... -->
  <VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
  <VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
</PropertyGroup>

https://github.com/microsoft/vcpkg/blob/master/docs/users/integration.md#with-msbuild

person Alex1844    schedule 23.10.2019