选择正确的C/C++ runtime library

本文是对http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html的翻译,如有错误,还请指正

c/c++运行库(runtime library)包括许多基本的功能,像内存分配、输出和字符串操作(复制、计算长度)等等

当建立了一个c/c++的应用程序或库时,你必须选中c/c++运行库,在vs2005中,你可以这样选中这种按钮:Project->Properties...->Configuration Properties->C/C++->Code Generation->Runtime Library:

这里有4种选择:

1 多线程(/MT)

2 多线程调试(/MTD)

3 多线程动态链接库dll(/MD)

4 多线程动态链接库调试(/MDD)

c++的运行库依赖于c的运行库。c的运行库版本必须和c++的运行库版本匹配。因此,这些选项应用于c和c++的运行库中。

在之前vs的版本中,这些都是单线程的。那些版本会比多线程的执行的速度更快。但是,在多线程的应用程序中,用他们并不安全。我想,单线程库在减少是因为多核现在已经成为普遍的存在。而且多线程应用程序需要利用多核。

(In previous versions of Visual Studio, you had additional options that were single-threaded. These versions would execute faster on a single core than the multi-threaded versions. However, they were not safe to use in a multi-threaded application. I‘m guessing these libraries were dropped since multiple cores are quickly becoming ubiquitous and multi-threaded applications are needed to take advantage of these extra cores.)

这两种变量会有四种选择

  • 调试版本(debug) vs  发布版本(release)
  • 动态链接库(dll)vs 静态库

第一种变量很简单,在不交给顾客的内部软件中应用调试版。调试的运行库不能合法的包含你的应用程序。这么说吧,你不能将软件的debug版本交给顾客。它应该是运行库的release版本

debug运行库让你会的一些有用的调试帮助,比如错误报告和跟踪内存泄露,想了解更多的debug功能,请看http://msdn.microsoft.com/en-us/library/zh712wwf%28VS.80%29.aspx

下一个变量就是动态链接库(dll)或静态库了。通常来说,我们应当使用dll,当出现下面请看时,你可以考虑静态库版本:

  • 你有一个小的应用程序,你不想浪费内存让运行库调用一些你不想要的东西上面
  • 你想要一个简单的应用程序不依赖于额外运行库的dll

当你的应用程序不需要其他库时这些指令运行的非常好。但这很少发生。在应用程序中使用多余一个运行库版本Microsoft列出了几点模糊的警告在他们的文档里。

目的就是在你的整个应用程序里只使用一种运行库。

但这几乎不可能因为因为你对别的类库用了什么库时没有权限的。比如说,openGL(open graphic library)需要使用类库。如果你的应用程序或是使用的其他类库没有和openGL使用同样的类库,那么你就在同时用着几个类库。

我们怎么知道某个exe,dll,lib,obj使用了哪个类库呢,使用下面这条命令:、

dumpbin /all XXXX | find /i "msvcr"

XXX表示你想知道的exe/dll/lib/obj

想知道运行的结果代表什么,可参照:http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx

如果你什么也没得到,很可能你现在用的是一个静态库。

甚至在你知道用的是哪个运行库,你会发现要使得应用程序只用一个运行库也是不可能的。如果如果你匹配运行库,会发现,有可能一个类库用的是vs7.0的版本(msvct.dll)但是你只能访问vs8.0的类库。

所以,除了某些特定情况,类库混在一起用关系不大。一个好的类库应该避开这些情况,然后类库匹配的时候就没多大关系了。

时间: 2024-10-06 16:32:31

选择正确的C/C++ runtime library的相关文章

CRT (C run-time library)详述

一 产生 运行时库是程序在运行时所需要的库文件,通常以LIB或DLL形式提供. C运行时库就是C run-time library,诞生于20世纪70年代,是C而非C++语言世界的概念,C程序运行时需要这些库中的函数. C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等).所以,C语言内核开发出来之后,Dennis Ritchie和Brian Kernighan就用C本身重写了90%以上的UNIX系统函数,并且把其中最常用的部分独立出来,形成头文件和对应

Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. 有些时候,在你安装.执行某个软件,可能会得到这样一个错误提示: Microsoft Visual C++ Runtime Library Runtime Error! Program:c:/windows/explorer.exe This application has requested the

Microsoft Visual C++ Runtime Library Runtime Error解决的方式

打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. 有些时候,在你安装.执行某个软件,可能会得到这样一个错误提示: Microsoft Visual C++ Runtime Library Runtime Error! Program:c:/windows/explorer.exe This application has requested the

【转】C Runtime Library的来历

由于我看到的文章也是转载且未提供原文链接,所以这里没有提供原文链接! msvcrt.dll(名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(VC)编译的程序提供了初始化(如获取命令行参数)以及退出等功能. C Runtime Library 的来历, API, STL, MFC, ATL关系 刚接触Windows开发时,为了快速入门查了不少资料,没想到看的越多,脑袋越糊涂.因为写同一种功能的程序,找

[转]oracle设计数据库应选择正确的数据类型

原文地址:http://blog.sina.com.cn/s/blog_5014663501007n40.html 在设计数据库的时候,选择正确的数据类型,往往可以避免很多的问题,正确理解数据库的类型,对于存储空间规划,应用性能调整都会很有帮助,下面是我个人的一点总结: 1. Char 定长格式字符串,在数据库中存储时不足位数填补空格,不建议使用,会带来不必要的麻烦 a.  字符串比较的时候,如果不注意(char不足位补空格)会带来错误 b.  字符串比较的时候,如果用trim函数,这样该字段上

如何选择正确值的上拉电阻和下拉电阻?

如何选择正确值的上拉电阻和下拉电阻?上拉电阻和下拉电阻是如何确定?还是在选择此类电阻的时候,有个特定的范围? 对上拉电阻和下拉电阻的选择应结合开关管特性和下级电路的输入特性进行设定,主要需要考虑以下几个因素: 1. 驱动能力与功耗的平衡.以上拉电阻为例,一般地说,上拉电阻越小,驱动能力越强,但功耗越大,设计是应注意两者之间的均衡.2. 下级电路的驱动需求.同样以上拉电阻为例,当输出高电平时,开关管断开,上拉电阻应适当选择以能够向下级电路提供足够的电流.3. 高低电平的设定.不同电路的高低电平的门

Visual C++ Runtime Library

Win系统必备的 Visual C++ Runtime Library 下载:http://pan.baidu.com/s/1c0gXNMC

/MD, /MT, /LD (Use Run-Time Library)

msdn Indicates whether a multithreaded module is a DLL and specifies retail or debug versions of the run-time library. Copy /MD[d] /MT[d] /LD[d] Remarks Option Description /MD Causes the application to use the multithread-specific and DLL-specific ve

翻译:程序员数据结构基础:选择正确的数据结构

本文转载自GameDev.net,仅供学习交流.因为刚刚开始学习翻译,难免有些疏漏,如果有哪些地方翻译的不正确,请不吝告知,万分感谢. 原文链接:http://www.gamedev.net/page/resources/_/technical/general-programming/data-structures-for-pre-college-programmers-choosing-the-right-structure-r2991 网络上的许多初学者还是学生.通常初学者通过在网上看教程,