/MD, /MDD, /ML, /MT,/MTD(使用运行时库) .

1. VC编译选项

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


2. C 运行时库                                                库文件
Single thread(static link) ML                       libc.lib
Debug single thread(static link) MLd          libcd.lib
MultiThread(static link) MT                         libcmt.lib
Debug multiThread(static link) MTd            libcmtd.lib
MultiThread(dynamic link) MD                    msvert.lib
Debug multiThread(dynamic link) MDd       msvertd.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 版本。


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

 

转自:http://blog.csdn.net/wfq_1985/article/details/7303825

转载于:https://www.cnblogs.com/de0319gh/p/3659727.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js开发入门(一)——安装Node.js及编辑器配置

Node.js是一个轻松构建快速,可扩展的网络应用平台建立在Chrome的JavaScript运行。Node.js使用事件驱动,非阻塞I/O模型,使得它重量轻,高效,完美的数据密集型实时应用程序运行在分布式设备。 Node.js是让JavaScript脱离浏…

存储过程执行权限

最后更新时间: 2014年4月13日,星期日存储过程分为两种,即DR(Definers Rights ) Procedure和IR(Invokers Rights ) Procedure。为什么会有两种存储过程呢?比如说用户user02创建了修改表t1的存储过程,当用户user01调用时,是修改的user01自己的t…

架构风格与基于网络的软件架构设计

原文链接 https://blog.csdn.net/on_1y/article/details/60358117 架构风格与基于网络的软件架构设计 如今许多服务都采用了 RESTful API, 而 REST 这一架构风格,最早即来源于 Roy Thomas Fielding 的博士论文 Architectural Styles and the Design of Network-bas…

2009年广东省大学生程序设计竞赛 A

// 水题&#xff0c;数高为 2 就可以 既把2-n 点 都连到 1 点&#xff0c;#include<cstdio>#include<iostream>#include<map>#include <set>#include<cstring>#include<queue>#include<algorithm>#include<vector>using names…

视频容器与编解码器的区别

这基本是一个老生常谈的东西了&#xff0c;但是我仍然是看了很多资料&#xff0c;加上一点点理解才完全明白了其中的差别所在。 这就像上学时的考试大纲&#xff0c;这种东西要求是识记类型的&#xff0c;没有技术门槛&#xff0c;但是只有你把东西都记住之后&#xff0c;才完全…

C#生成高清缩略图

01/// <summary> 02 /// 为图片生成缩略图 03 /// </summary> 04 /// <param name"phyPath">原图片的路径</param> 05 /// <param name"width">缩略图宽</param> 06 /// <param name"height"…

win7安装nodejs 高版本不支持 换低版本

win7安装nodejs失败 显示This application is only supported on Windows 8.1,Windows Server 2012 R2,or higer. win7安装nodejs失败 在win7重装nodejs&#xff0c;版本是node-v14.16.1-x64&#xff0c;安装时报了win7系统不支持的问题 2021年4月8日 —— 目前除了最新的v14大…

[翻译]创建ASP.NET WebApi RESTful 服务(9)

一旦成功的发布API后&#xff0c;使用者将依赖于你所提供的服务。但是变更总是无法避免的&#xff0c;因此谨慎的制定ASP.NET Web API的版本策略就变得非常重要。一般来说&#xff0c;新的功能需要无缝的接入&#xff0c;有时新老版本需要并行&#xff0c;以便给使用者足够的时…

研究生导师一般希望招什么样的研究生?

虽然还不是导师&#xff0c;但也在学校蹲了不少年头了&#xff0c;看着一级级研究生毕业奔赴各方&#xff0c;其实还是蛮有感触的。 各位同学很多在硕士期间回忆并不算好&#xff0c;其实就是从一开始没有搞明白一件事&#xff1a;导师招生为了什么&#xff0c;我们上研又为了什…

动态调用链接库(dll) 续

20141118 最近一周做了一个关于仓库管理&#xff0c;拣货任务分配的模块&#xff0c;其中涉及到刷卡自动打印领取任务的功能点。 技术点&#xff1a; C#调用C、delphi的动态链接库。动态链接库的调用方法不同。效果也不相同。 DLL位置&#xff1a;执行程序根目录下面 例&#x…

读写日志文件

日志为文本文件每列以制表符隔开 行以换行符隔开 本次示例简单实现如下相关功能&#xff1a;1.正写日志文本 最新的日志放后面2.倒写日志文本 最新的日志放前面3.读日志文本内容显示在Label4.读日志文本内容到DataTable 及 筛选后显示在GridView--------------------(以下操作并…

游戏策划试题(1)——摘自牛客网

对于游戏涉及的不多&#xff0c;但是对暴雪在各种经验贴和小道消息上还是有些了解的。涉猎一下 策划游戏之类 的面试知识&#xff0c;横向拓宽知识面&#xff0c;也有助于自己拓宽视野&#xff0c;看看这种游戏文案策划 作为一名运营策划&#xff0c;你觉得可通过哪些途径起到保…

Android Fragment应用实战

现在Fragment的应用真的是越来越广泛了&#xff0c;之前Android在3.0版本加入Fragment的时候&#xff0c;主要是为了解决Android Pad屏幕比较大&#xff0c;空间不能充分利用的问题&#xff0c;但现在即使只是在手机上&#xff0c;也有很多的场景可以运用到Fragment了&#xff…

初识树莓派

初识树莓派这一微型计算机&#xff0c;基本了解概念&#xff0c; 1、树莓派简介 Raspberry Pi(中文名为“树莓派”,简写为RPi&#xff0c;或者 RasPi/RPi)是为学生计算机编程教育而设计&#xff0c;只有信用卡大小的卡片式电脑&#xff0c;其系统基于Linux开发而来的。树莓派由…

ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)

0.引言 本文主要讲解RTSP框架和抓取RTSP数据包&#xff0c;进行详细分析。可以阅读以下几篇文章&#xff0c;能够帮助你更详细理解。 手把手搭建RTSP流媒体服务器 HLS实战之Wireshark抓包分析 HTTP实战之Wireshark抓包分析 1.RTSP协议简述 RTSP&#xff1a;Real Time Stream…

遍历窗体中所有控件的信息

public void TraverControl(Control Ctl) {   foreach (Control c in Ctl.Controls)  {     label1.Text "\n" "" c.Name "" "\n";     //用于显示窗体中包含的所有的控件名&#xff0c;首先显示的是最外层的控件  …

xshell 软件的窗口一直是置顶 调整为不置顶

突然感觉xshell 软件的窗口一直是置顶状态&#xff0c;点别的软件窗口点不过去&#xff0c; 搜索一下&#xff1a;微信的 alta是截图&#xff0c;和xshell这个冲突了。如果在xshell下按了这个&#xff0c;不知不觉就被置顶了。。。。。MMP 即这个意思&#xff1a; 如果要修改…

Linux下Vim工具常用命令

原文地址&#xff1a; http://www.cnblogs.com/lizhenghn/p/3675011.html 在linux下做开发&#xff0c;甚至是只做管理维护工作&#xff0c;也少不了Vim的使用。作为一个新手&#xff0c;我也是刚刚接触&#xff0c;本节将我日常使用或收集的Vim常用命令记录下来。 当然&#x…

整理加解释:以太网、快速以太网、千兆以太网和万兆以太网分别的概念和区分 大详解

一、以太网是什么 以太网(Ethernet)最早是由Xerox(施乐)公司创建的局域网组网规范&#xff0c;1980年DEC、Intel和Xeox三家公司联合开发了初版Ethernet规范—DIX 1.0&#xff0c;1982年这三家公司又推出了修改版本DIX 2.0&#xff0c;并将其提交给EEE 802工作组&#xff0c;经I…

zoj 1109 Language of FatMouse 解题报告

题目链接&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId109 题目意思&#xff1a;给出一个mouse-english词典&#xff0c;问对于输入的mouse单词&#xff0c;能否在这个词典里找出对应的english&#xff0c;不能输出“eh” 这里用到map来做&#xf…