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

MSVC编译器中/LD选项的设置位置及Runtime Library相关疑问

关于Visual Studio C++中/LD/LDd与Runtime Library选项的区别

核心结论

/LD、/LDd不属于「Runtime Library」选项的范畴,它们是控制输出文件类型的链接器选项,和控制C++标准库链接方式的/MD/MT系列是独立配置的——VS的UI把这两类选项分开了,所以你在「代码生成」的Runtime Library下拉里看不到/LD/LDd。

详细解释

  1. 两类选项的分工

    • /MD、/MT、/MDd、/MTd:属于「Runtime Library」配置,控制的是C++标准库(MSVCRT系列)的链接方式:
      • /MD:Release模式下链接动态版标准库(依赖MSVCRT.dll)
      • /MT:Release模式下链接静态版标准库(标准库代码嵌入到你的DLL/EXE中)
      • /MDd:Debug模式下链接动态版Debug标准库(依赖MSVCRTD.dll)
      • /MTd:Debug模式下链接静态版Debug标准库
    • /LD、/LDd:属于链接器的输出类型选项,作用是告诉链接器生成DLL文件(而非EXE或静态库):
      • /LD对应Release模式,/LDd对应Debug模式
  2. 为什么VS项目里看不到/LD/LDd选项?
    当你把项目配置类型设为「Dynamic library (.dll)」时,Visual Studio会自动在链接命令中添加/LD(Release)或/LDd(Debug)参数,不需要你手动在Runtime Library里选择——这俩本来就不是同一个配置组的内容。你可以去「项目属性->链接器->命令行」里查看,就能看到自动添加的/LD系列参数。

  3. 文档中「/LD默认隐含/MT」的含义
    这个规则是针对直接使用cl命令行编译的场景:如果只写cl /LD test.cpp,编译器会默认用/MT(静态链接标准库);但如果显式加上/MD,比如cl /MD /LD test.cpp,就会覆盖默认,改成动态链接标准库。

    而在VS项目中,这个逻辑被拆分成了两个独立配置:

    • 配置类型选DLL → VS自动加/LD
    • Runtime Library选/MD或/MT → 控制标准库链接方式
      两者组合起来,就对应了MS Learn文档里提到的6种配置(3种基础类型分Debug/Release,其中基础类型包括「生成EXE+动态标准库」「生成EXE+静态标准库」「生成DLL+动态/静态标准库」)。
  4. 你的DLL项目的实际配置逻辑
    你当前的项目已经设为DLL类型,VS自动添加了/LD系列参数,你在「代码生成」里选择/MD或/MT,就是在组合「动态/静态链接标准库」和「生成DLL」这两个要求,完全符合文档里的配置逻辑,不需要手动额外添加/LD参数。

内容的提问来源于stack exchange,提问作者Thomas W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:32:41