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

CMake是否支持Windows平台下的DLL延迟加载功能?

CMake配置MSVC DLL延迟加载的实现方法

CMake完全支持Visual Studio工具链下的DLL延迟加载配置,不存在因为起源于Linux生态就不支持Windows专属特性的问题。

MSBuild属性页里的「延迟加载DLL」配置,本质是给MSVC链接器传递两类参数,你在CMake里直接给目标传入对应参数即可实现完全一致的效果,不需要依赖特殊的CMAKE_前缀全局变量:

  • 针对每个需要延迟加载的DLL,传入链接选项 /DELAYLOAD:<dll文件名>
  • 链接MSVC自带的延迟加载支撑库 delayimp.lib

配置示例

假设你的构建目标名为MyApp,需要对test.dll、utils.dll设置延迟加载,在CMakeLists.txt中对应写法如下:

# 仅针对MSVC工具链生效,避免跨平台构建传参错误
if(MSVC)
    target_link_libraries(MyApp PRIVATE
        # 原有其他依赖库保持不变
        /DELAYLOAD:test.dll
        /DELAYLOAD:utils.dll
        delayimp.lib
    )
endif()

补充说明

  • 上述配置的效果和Visual Studio属性页中手动设置延迟加载DLL完全一致,CMake会自动把参数透传给MSVC链接器,最终生成的二进制延迟加载行为没有区别。
  • DLL延迟加载确实是Windows PE文件格式、MSVC链接器独有的机制:Linux下ELF格式的动态库默认就使用延迟绑定(PLT/GOT机制),程序启动时不会加载全部动态库符号,只有第一次调用对应函数时才会解析符号地址,本身就不需要额外的链接参数实现类似效果,不存在对应配置项。
  • 如果需要配置延迟加载的异常处理、卸载逻辑等高级特性,直接在target_link_options里传入对应的MSVC链接参数即可,所有/DELAY*开头的链接器参数都可以直接透传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:30:48