MSVC编译器中/LD选项的设置位置及Runtime Library相关疑问
关于Visual Studio C++中/LD/LDd与Runtime Library选项的区别
核心结论
/LD、/LDd不属于「Runtime Library」选项的范畴,它们是控制输出文件类型的链接器选项,和控制C++标准库链接方式的/MD/MT系列是独立配置的——VS的UI把这两类选项分开了,所以你在「代码生成」的Runtime Library下拉里看不到/LD/LDd。
详细解释
两类选项的分工
- /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模式
- /MD、/MT、/MDd、/MTd:属于「Runtime Library」配置,控制的是C++标准库(MSVCRT系列)的链接方式:
为什么VS项目里看不到/LD/LDd选项?
当你把项目配置类型设为「Dynamic library (.dll)」时,Visual Studio会自动在链接命令中添加/LD(Release)或/LDd(Debug)参数,不需要你手动在Runtime Library里选择——这俩本来就不是同一个配置组的内容。你可以去「项目属性->链接器->命令行」里查看,就能看到自动添加的/LD系列参数。文档中「/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+动态/静态标准库」)。
你的DLL项目的实际配置逻辑
你当前的项目已经设为DLL类型,VS自动添加了/LD系列参数,你在「代码生成」里选择/MD或/MT,就是在组合「动态/静态链接标准库」和「生成DLL」这两个要求,完全符合文档里的配置逻辑,不需要手动额外添加/LD参数。
内容的提问来源于stack exchange,提问作者Thomas W.
相关产品推荐
相关产品推荐

