md /mdd /ml /mt/mtd

news/2024/12/4 3:39:17/

from : http://www.cnblogs.com/jinianjun/archive/2012/03/28/2420502.html


VC编译选项:

多线程(/MT)
多线程调试(/MTd)
多线程 DLL (/MD)
多线程调试 DLL (/MDd)

C 运行时库库文件
Single thread(static link) MLlibc.lib
Debug single thread(static link) MLdlibcd.lib
MultiThread(static link) MTlibcmt.lib
Debug multiThread(static link) MTdlibcmtd.lib
MultiThread(dynamic link) MD msvert.lib
Debug multiThread(dynamic link) MDdmsvertd.lib


3. 各种 C 运行时库的区别
( 1 )静态链接的单线程库
静态链接的单线程库只能用于单线程的应用程序, C 运行时库的目标代码最终被编译在应用程序的二进制文件中。通过 /ML 编译选项可以设置 Visual C++ 使用静态链接的单线
程库。
( 2 )静态链接的多线程库
静态链接的多线程库的目标代码也最终被编译在应用程序的二进制文件中,但是它可以在多线程程序中使用。通过 /MT 编译选项可以设置 Visual C++ 使用静态链接的多线程库。
( 3 )动态链接的运行时库
动态链接的运行时库将所有的 C 库函数保存在一个单独的动态链接库 MSVCRTxx.DLL 中, MSVCRTxx.DLL 处理了多线程问题。使用 /MD 编译选项可以设置 Visual C++ 使用动态
链接的运行时库。
/MDd 、 /MLd 或 /MTd 选项使用 Debug runtime library( 调试版本的运行时刻函数库 ) ,与 /MD 、 /ML 或 /MT 分别对应。 Debug 版本的 Runtime Library 包含了调试信息,并采用了一些保护机制以帮助发现错误,加强了对错误的检测,因此在运行性能方面比不上 Release 版本。


下面是msdn关于Visual C++ 编译器选项的说明:
这些选项选择单线程或多线程运行时例程,指示多线程模块是否为 DLL,并选择运行时库的发布版本或调试版本。
选项 说明
/MD 定义 _MT 和 _DLL 以便同时从标准 .h 文件中选择运行时例程的多线程特定版本和 DLL 特定版本。此选项还使编译器将库名 MSVCRT.lib 放入 .obj 文件中。
用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 链
接的应用程序可用。
当在定义了 _STATIC_CPPLIB (/D_STATIC_CPPLIB) 的情况下使用 /MD 时,它将导致应用程序通过静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 进行链接
,同时仍通过 msvcrt.lib 动态链接到主 CRT。
/MDd 定义 _DEBUG、_MT 和 _DLL,以便从标准 .h 文件中选择运行时例程的调试多线程特定版本和 DLL 特定版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。
/ML 使编译器将库名 LIBC.lib 放入 .obj 文件中,以便链接器使用 LIBC.lib 解析外部符号。这是编译器的默认操作。LIBC.lib 不提供多线程支持。
/MLd 定义 _DEBUG 并使编译器将库名 LIBCD.lib 放入 .obj 文件中,以便链接器使用 LIBCD.lib 解析外部符号。LIBCD.lib 不提供多线程支持。
/MT 定义 _MT,以便从标准头 (.h) 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析
外部符号。创建多线程程序需要 /MT 或 /MD(或它们的调试等效选项 /MTd 或 /MDd)。
/MTd 定义 _DEBUG 和 _MT。定义 _MT 会导致从标准 .h 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使
用 LIBCMTD.lib 解析外部符号。创 建多线程程序需要 /MTd 或 /MDd(或它们的非调试等效选项 /MT 或 MD)。
/LD 创建 DLL。
将 /DLL 选项传递到链接器。链接器查找 DllMain 函数,但并不需要该函数。如果没有编写 DllMain 函数,链接器将插入返回 TRUE 的 DllMain 函数。
链接 DLL 启动代码。
如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的 DLL 的应用程序。
将 /Fe 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。
如果还未显式指定 /M 选项之一,则将默认运行时库支持更改为 /MT。
/LDd 创建调试 DLL。定义 _DEBUG。
警告 不要混合使用运行时库的静态版本和动态版本。在一个进程中有多个运行时库副本会导致问题,因为副本中的静态数据不与其他副本共享。链接器禁止在 .exe 文件内
部既使用静态版本又使用动态版本链接,但您仍可以使用运行时库的两个(或更多)副本。例如,当与用动态 (DLL) 版本的运行时库链接的 .exe 文件一起使用时,用静态(非
DLL)版本的运行时库链接的动态链接库可能导致问题。(还应该避免在一个进程中混合使用这些库的调试版本和非调试版本)。



http://www.ppmy.cn/news/188833.html

相关文章

md01 与md02的区别

MD01和MD02对同一个物料运行结果不一致原因 执行MD01 需要表mdvm(MRP文件中的条目)的数据支持,mdvm中没有的条目的物料将不能执行总计划。具体是无法执行FORM SELECT_MDVM_FOR_MRP,也就无法产生计划结果。在一个MRP已经激活的工厂…

什么是M2Det

M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network 本文的目标是构建更加高效的特征金字塔,以提高不同尺寸目标的检测准确率。 特征金字塔被广泛应用于目标检测中(one-stage的DSSD、RetinaNet、RefineDet和two-stage的Mask R-C…

MATLAB实现寻找信号中的峰值和谷值

一、峰值检测函数 1.findpeaks函数 (1)函数调用: (2)范例: clear all; clc; close all; yload(ffpulse.txt); % 读入脉搏数据 xdetrend(y); % 消除趋势项 fs200; …

md文件使用介绍

凌云之翼 写的一篇图文混合介绍 https://www.cnblogs.com/liugang-vip/p/6337580.html

(Mysql)Navicat如何导出Excel格式表结构

一、点击navicat查询(新建) 二、把如下查询sql语句复制粘贴进去,修改对应的数据库名称和表名称 SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,CHARACTER_MAXIMUM_LENGTH 长度,IS_NULLABLE 是否为空,COLUMN_DEFAULT 默认…

MDT概念说明

转自:http://www.winos.cn/html/21/t-39621.html http://hi.baidu.com/popweb/item/95ea6cf3aea966b530c19958 1、Information Center:该节点包含整个MDT 2008的相关信息(不过都是英文大家感兴趣的花可以看下)。①Getting Started:使用向导的相关信息。②Document…

/MD /MDd /MT /MTd

在VC下面,有4个参数是跟静态/动态编译有关的。 /MD /MDd /MT /MTd 其中, MT , MTd可以认为是静态编译。也就是说,设置成MT, MTd后编译出来的*.exe程序在运行时是带了符号的。而MD MDd是不带符号的。后面的小写的d表示是否允许调试&…

MDT 的一些操作

MDT 的一些操作 1、开始加设置变量 OSDComputerName%TaskSequenceID% 2、在 Apply Windows PE 前加 Copy takeown to system32 %comspec% /c copy /y \\MD5\Distribution$\Tools\x86\takeown.exe %systemroot%\system32 这个也可以通过 $oem$ 目录进行复制。 具体为&#xff1…