You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在vcpkg中排除指定库(openssl)的静态链接?

实现Windows-static Triplet下仅动态链接OpenSSL的方法

以下是通过自定义overlay triplet实现需求的具体操作步骤:

1. 创建自定义Triplet文件

在vcpkg的triplets目录下(通常路径为vcpkg\triplets),新建一个triplet文件,命名格式为[架构]-windows-static-override-openssl.cmake,比如针对64位系统创建x64-windows-static-override-openssl.cmake,32位则对应x86-windows-static-override-openssl.cmake。

2. 编写Triplet配置内容

将以下代码写入新建的triplet文件,核心逻辑是继承原有静态triplet的配置,仅单独覆盖OpenSSL的链接方式:

# 继承默认的静态triplet配置
include(${CMAKE_CURRENT_LIST_DIR}/x64-windows-static.cmake)

# 全局默认保持静态链接
set(VCPKG_LIBRARY_LINKAGE "static")

# 单独将OpenSSL设置为动态链接
set(VCPKG_LIBRARY_LINKAGE_openssl "dynamic")

# 保持原有静态triplet的CRT链接策略(若原triplet为静态CRT)
set(VCPKG_POLICY_DYNAMIC_LINK_CRT OFF)

注意:如果是32位场景,将第一行的x64-windows-static.cmake替换为x86-windows-static.cmake。

3. 使用自定义Triplet构建项目

方式一:通过vcpkg命令安装依赖时指定

执行安装命令时,将目标triplet指定为你新建的自定义triplet,示例:

vcpkg install openssl[core]:x64-windows-static-override-openssl boost:x64-windows-static-override-openssl

方式二:在CMake项目中指定

在项目的CMakeLists.txt开头添加以下配置,指定使用自定义triplet:

set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake")
set(VCPKG_TARGET_TRIPLET "x64-windows-static-override-openssl")

4. 验证效果

项目构建完成后,可通过工具(如Dependency Walker)检查生成的可执行文件依赖,会发现OpenSSL相关的libcrypto-*.dll和libssl-*.dll被列为动态依赖,而其他依赖库则已静态链接到可执行文件中。

内容的提问来源于stack exchange,提问作者Steel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:26:33