Как статически связать VCPKG .lib файл в Visual Studio - PullRequest
1 голос
/ 22 октября 2019

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

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

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

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

Как настроить Visual Studio для статической ссылки на нужный файл .lib?

1 Ответ

0 голосов
/ 23 октября 2019

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

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

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

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

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

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

<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

...