如何在Visual Studio中静态链接VCPKG产生的.lib文件

问题描述 投票:1回答:1

例如,我使用VCPKG构建像libcurl这样的第三方库。我有动态和静态版本。显然,import .lib和object .lib文件包含在两个不同的文件夹中,分别是x64-windows和x64-windows-static。我想将对象libcurl.lib与我的程序静态链接,但无法弄清楚如何配置Visual Studio来执行此操作。它总是最终使用导入库而不是对象库,因此我的程序最终在执行时需要libcurl.dll。

我已将主项目配置为使用/ MT运行时库。我尝试将链接器配置为使用指向静态lib文件夹和其他依赖项的其他库文件夹。我什至尝试在链接器其他依赖项中使用对象libcurl.lib文件的完整路径。

当我/ MT切换运行时库时,我可以通过使用Dependency Walker来告知,所有常规库(如vcruntime)都集成在可执行文件中,而不是作为DLL加载,但是libucurl.dll仍然存在,可以动态加载。

似乎由于VCPKG自动包含路径集成,即使我在链接器输入中指定了对象libcurl.lib的完整路径,Visual Studio也会始终首先查找并使用导入libcurl.lib。

如何配置Visual Studio以静态链接正确的.lib文件?

visual-studio static linker vcpkg
1个回答
0
投票

[好,我找到了可能遇到相同问题的任何人的解决方案。

默认情况下,Visual Studio使用x64-windows或x86-windows“ triplet”

您可以通过将MSBuild的详细程度设置为“普通”或更高级别来查看自动推断的三元组:

快捷方式:Ctrl + Q“构建并运行”

工具->选项->项目和解决方案->生成并运行-> MSBuild项目生成输出详细信息

要覆盖自动选择的三元组并使用x64-windows-static或x86-windows-static,您可以在.vcxproj中通过将其添加到Globals PropertyGroup中来指定MSBuild属性VcpkgTriplet。

<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

© www.soinside.com 2019 - 2024. All rights reserved.