转载自:http://blog.sina.com.cn/s/blog_5e9e98210101h0y7.html
/ML、/MLd、/MT、/MTd、/MD、/MDd这几个选项告诉编译器应用程序想使用什么版本的C标准程序库。
1)/ML(缺省选项)对应单线程静态版的标准程序库(libc.lib)
2)/MT对应多线程静态版标准库(libcmt.lib)此时编译器会自动定义_MT宏
3)/MD对应多线程DLL版(导入库msvcrt.lib)DLL是msvcrt.dll,编译器自动定义_MT和_DLL两个宏。
后面加d的选项会让编译器自动多定义一个_DEBUG宏,表示要使用对应标准库的调试版,因此
4)/MLd对应调试版单线程静态标准库(libcd.lib)
5)/MTd对应调试版多线程静态标准库(libcmtd.lib)
6)/MDd对应调试版多线程DLL标准库(导入库msvcrtd.lib),DLL是msvcrtd.dll
具体每个选项的说明如下:
选项 | 说明 |
---|---|
/MD | 定义 用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。 当 在定义了 _STATIC_CPPLIB (/D_STATIC_CPPLIB) 的情况下使用 /MD 时,它将导致应用程序通过静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 进行链接,同时仍通过 msvcrt.lib 动态链接到主 CRT。 |
/MDd | 定义 |
/ML | 使编译器将库名 LIBC.lib 放入 .obj 文件中,以便链接器使用 LIBC.lib 解析外部符号。这是编译器的默认操作。LIBC.lib 不提供多线程支持。 |
/MLd | 定义 |
/MT | 定义 |
/MTd | 定义 |
/LD | 创建 DLL。 将 /DLL 选项传递到链接器。链接器查找 链接 DLL 启动代码。 如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的 DLL 的应用程序。 将 如果还未显式指定 /M 选项之一,则将默认运行时库支持更改为 /MT。 |
/LDd | 创建调试 DLL。定义 |