/MD、/MT、/LD(使用运行时库)

这篇博客探讨了在Visual Studio中如何选择C++编译器的运行时库选项,包括/DLL、/MT和/LD。内容涉及多线程模块是否作为DLL,零售和调试版本的运行时库选择,以及如何在项目属性页和编程方式中设置这些选项。强调所有模块必须使用相同编译器选项,并提供了相关资源链接深入理解C运行时库和DLL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

允许您指示多线程模块是否是 DLL,并可以选择运行时库的零售版本或调试版本。

/MD[d]
/MT[d]
/LD[d]

备注

选项

说明

/MD

使应用程序使用运行时库的多线程并特定于 DLL 的版本。定义 _MT_DLL,并使编译器将库名 MSVCRT.lib 放入 .obj 文件中。

用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR90.DLL, 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。

/MD_STATIC_CPPLIB 预处理器定义 (/D_STATIC_CPPLIB) 一起使用时,您的应用程序将与静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 链接,但仍通过 msvcrt.lib 动态链接到主 CRT。

请注意,不支持 _STATIC_CPPLIB 预处理器定义和 /clr/clr:pure 编译器选项的组合。有关 /clr 选项的限制的更多信息,请参见 /clr 限制

/MDd

定义 _DEBUG_MT_DLL,并使应用程序使用运行时库的调试多线程并特定于 DLL 的版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。

/MT

使应用程序使用运行时库的多线程静态版本。定义 _MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。

/MTd

定义 _DEBUG_MT。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用 LIBCMTD.lib 解析外部符号。

/LD

创建 DLL。

将 /DLL 选项传递到链接器。链接器查找 DllMain 函数,但并不需要该函数。如果没有编写 DllMain 函数,链接器将插入返回 TRUE 的 DllMain 函数。

链接 DLL 启动代码。

如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的 DLL 的应用程序。

/Fe(命名 EXE 文件) 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。

除非显式指定 /MD,否则将暗指 /MT

/LDd

创建调试 DLL。定义 _MT_DEBUG

有关 C 运行时库以及使用 /clr(公共语言运行库编译) 进行编译时要使用哪些库的更多信息,请参见 C Run-Time Libraries。

传递给链接器的给定调用的所有模块都必须使用相同的运行时库编译器选项(/MD/MT/LD)进行编译。

有关使用运行时库的调试版本的更多信息,请参见 Run-Time Library Reference。

知识库文章 Q140584 也讨论如何选择适当的 C 运行时库。

有关 DLL 的进一步讨论,请参见 DLL。

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。

  2. 单击“C/C++”文件夹。

  3. 单击“代码生成”属性页。

  4. 修改“运行时库”属性。

以编程方式设置此编译器选项

  • 请参见 RuntimeLibrary。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值