Ale*_*844 7 linker static visual-studio vcpkg
例如,我使用 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 自动包含路径集成,Visual Studio 总是首先找到并使用导入 libcurl.lib,即使我在链接器输入中指定了对象 libcurl.lib 的完整路径。
如何配置 Visual Studio 以静态链接正确的 .lib 文件?
好的,我为可能遇到相同问题的任何人找到了解决方案。
默认情况下,Visual Studio 使用 x64-windows 或 x86-windows “triplet”
您可以通过将 MSBuild 详细程度设置为 Normal 或更高来查看自动推导出的三元组:
快捷键:Ctrl+Q“构建并运行”
工具 -> 选项 -> 项目和解决方案 -> 构建和运行 -> MSBuild 项目构建输出详细信息
要覆盖自动选择的三元组并使用 x64-windows-static 或 x86-windows-static,您可以通过将其添加到 Globals PropertyGroup 在 .vcxproj 中指定 MSBuild 属性 VcpkgTriplet。
<PropertyGroup Label="Globals">
<!-- .... -->
<VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
<VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
https://github.com/microsoft/vcpkg/blob/master/docs/users/integration.md#with-msbuild
| 归档时间: |
|
| 查看次数: |
2321 次 |
| 最近记录: |